抽象工厂模式
抽象工厂模式(Abstract Factory Pattern)是一种创建型设计模式,它提供一个接口用于创建一系列相关或依赖对象的家族,而无需指定它们具体的类。
在抽象工厂模式中,抽象工厂提供了一个接口,该接口可以用于创建一系列相关的产品,这些产品可以是一系列不同的产品,但它们都属于同一产品族。具体的工厂类实现了这个抽象工厂接口,并负责创建具体的产品。每个具体的工厂类都是负责创建同一产品族中的一组具体产品。
抽象工厂模式通常适用于以下情况:
- 当一个系统需要一组相关的产品,并且这些产品具有共同的约束时,可以使用抽象工厂模式。
- 当需要在不同的产品族之间切换时,可以使用抽象工厂模式。
一个简单的抽象工厂模式示例是创建不同操作系统的 GUI 工厂。假设我们需要创建两种操作系统的 GUI 工厂:Windows 和 Mac。
首先,我们需要定义一个抽象工厂接口 GUIFactory,它声明了创建不同 GUI 组件的方法:
public interface GUIFactory {
Button createButton();
Checkbox createCheckbox();
}
接下来,我们定义 Windows GUI 工厂和 Mac GUI 工厂,它们实现了 GUIFactory 接口:
public class WindowsGUIFactory implements GUIFactory {
public Button createButton() {
return new WindowsButton();
}
public Checkbox createCheckbox() {
return new WindowsCheckbox();
}
}
public class MacGUIFactory implements GUIFactory {
public Button createButton() {
return new MacButton();
}
public Checkbox createCheckbox() {
return new MacCheckbox();
}
}
然后,我们定义不同的 GUI 组件(如 WindowsButton、MacButton、WindowsCheckbox 和 MacCheckbox),它们实现了 Button 和 Checkbox 接口。
客户端可以通过传递不同的操作系统名称来创建不同的 GUI 工厂:
GUIFactory factory = null;
String os = System.getProperty("os.name").toLowerCase();
if (os.contains("windows")) {
factory = new WindowsGUIFactory();
} else if (os.contains("mac")) {
factory = new MacGUIFactory();
}
Button button = factory.createButton();
button.paint();
Checkbox checkbox = factory.createCheckbox();
checkbox.paint();
这样,客户端就可以使用抽象工厂接口来创建不同操作系统的 GUI 工厂,并使用它们创建不同的 GUI 组件。这种方式使得客户端代码更加灵活,可以轻松地添加新的操作系统和 GUI 组件类型。