- 抽象工厂模式
- 意图:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。
- 例子:GUI库,为不同操作系统(Windows, Mac)创建一套风格一致的按钮、文本框等控件。
抽象工厂模式的 Java 实现示例,模拟 GUI 控件库的场景(支持 Windows 和 Mac 风格的按钮和文本框):
java
// 1. 定义抽象产品接口:按钮和文本框
interface Button {
void render();
}
interface TextBox {
void display();
}
// 2. 实现具体产品:Windows 风格的控件
class WindowsButton implements Button {
@Override
public void render() {
System.out.println("渲染一个 Windows 风格的按钮");
}
}
class WindowsTextBox implements TextBox {
@Override
public void display() {
System.out.println("显示一个 Windows 风格的文本框");
}
}
// 3. 实现具体产品:Mac 风格的控件
class MacButton implements Button {
@Override
public void render() {
System.out.println("渲染一个 Mac 风格的按钮");
}
}
class MacTextBox implements TextBox {
@Override
public void display() {
System.out.println("显示一个 Mac 风格的文本框");
}
}
// 4. 定义抽象工厂接口:用于创建一套控件
interface GUIFactory {
Button createButton();
TextBox createTextBox();
}
// 5. 实现具体工厂:Windows 工厂和 Mac 工厂
class WindowsFactory implements GUIFactory {
@Override
public Button createButton() {
return new WindowsButton();
}
@Override
public TextBox createTextBox() {
return new WindowsTextBox();
}
}
class MacFactory implements GUIFactory {
@Override
public Button createButton() {
return new MacButton();
}
@Override
public TextBox createTextBox() {
return new MacTextBox();
}
}
// 6. 客户端代码:根据配置选择工厂并创建控件
public class AbstractFactoryDemo {
public static void main(String[] args) {
// 模拟配置:根据系统选择工厂
String osType = "Windows"; // 可替换为 "Mac"
GUIFactory factory;
if (osType.equalsIgnoreCase("Windows")) {
factory = new WindowsFactory();
} else {
factory = new MacFactory();
}
// 创建一套风格一致的控件
Button button = factory.createButton();
TextBox textBox = factory.createTextBox();
// 使用控件
button.render();
textBox.display();
}
}