2024年5月10日发(作者:)

java抽象工厂模式举例

抽象工厂模式是一种创建型设计模式,它提供一个接口用于创建相关对象家族,而无需明确

指定它们的具体类。下面是一个简单的Java抽象工厂模式的示例,假设我们有两个不同类

型的工厂,每个工厂可以创建多种相关产品。

首先,定义两个产品家族的抽象接口:

```java

// 抽象产品A

interface Window {

void open();

}

// 具体产品A1

class WindowsWindow implements Window {

@Override

public void open() {

n("Opening a Windows window");

}

}

// 具体产品A2

class MacWindow implements Window {

@Override

public void open() {

n("Opening a Mac window");

}

}

// 抽象产品B

interface Button {

void click();

}

// 具体产品B1

class WindowsButton implements Button {

@Override

public void click() {

n("Clicking a Windows button");

}

}

// 具体产品B2

class MacButton implements Button {

@Override

public void click() {

n("Clicking a Mac button");

}

}

```

接下来,定义抽象工厂接口,用于创建产品家族:

```java

// 抽象工厂接口

interface GUIFactory {

Window createWindow();

Button createButton();

}

```

然后,创建两个具体工厂类,分别用于创建Windows和Mac产品家族的对象:

```java

// 具体工厂1(用于创建Windows产品家族)

class WindowsFactory implements GUIFactory {

@Override

public Window createWindow() {

return new WindowsWindow();

}

@Override

public Button createButton() {

return new WindowsButton();

}

}

// 具体工厂2(用于创建Mac产品家族)

class MacFactory implements GUIFactory {

@Override

public Window createWindow() {

return new MacWindow();

}

@Override

public Button createButton() {

return new MacButton();

}

}

```

现在,您可以使用抽象工厂来创建不同产品家族的对象,而无需关心它们的具体实现:

```java

public class Main {

public static void main(String[] args) {

// 使用Windows工厂创建Windows产品家族的对象

GUIFactory windowsFactory = new WindowsFactory();

Window windowsWindow = Window();

Button windowsButton = Button();

(); // 输出:Opening a Windows window

(); // 输出:Clicking a Windows button

// 使用Mac工厂创建Mac产品家族的对象

GUIFactory macFactory = new MacFactory();

Window macWindow = Window();

Button macButton = Button();

(); // 输出:Opening a Mac window

(); // 输出:Clicking a Mac button

}

}

```

抽象工厂模式允许您创建一整个产品家族,确保这些产品能够协同工作。这个示例展示了如

何使用抽象工厂模式来创建不同平台的GUI元素,而不需要直接指定它们的具体类。