抽象工厂模式
基础概念
什么是抽象工厂模式?
答案: 抽象工厂模式(Abstract Factory Pattern)提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。
使用场景:
- 系统需要独立于产品的创建、组合和表示
- 系统需要由多个产品系列中的一个来配置
- 需要强调一系列相关产品对象的设计以便联合使用
优点:
- 隔离具体类的生成
- 易于交换产品系列
- 有利于产品的一致性
缺点:
- 难以支持新种类的产品
实现方式
java
// 抽象产品A
public interface Button {
void click();
}
// 抽象产品B
public interface TextField {
void input(String text);
}
// 具体产品:Windows按钮
public class WindowsButton implements Button {
@Override
public void click() {
System.out.println("Windows按钮点击");
}
}
// 具体产品:Mac按钮
public class MacButton implements Button {
@Override
public void click() {
System.out.println("Mac按钮点击");
}
}
// 具体产品:Windows文本框
public class WindowsTextField implements TextField {
@Override
public void input(String text) {
System.out.println("Windows文本框输入: " + text);
}
}
// 具体产品:Mac文本框
public class MacTextField implements TextField {
@Override
public void input(String text) {
System.out.println("Mac文本框输入: " + text);
}
}
// 抽象工厂
public interface GUIFactory {
Button createButton();
TextField createTextField();
}
// 具体工厂:Windows工厂
public class WindowsFactory implements GUIFactory {
@Override
public Button createButton() {
return new WindowsButton();
}
@Override
public TextField createTextField() {
return new WindowsTextField();
}
}
// 具体工厂:Mac工厂
public class MacFactory implements GUIFactory {
@Override
public Button createButton() {
return new MacButton();
}
@Override
public TextField createTextField() {
return new MacTextField();
}
}
// 使用
GUIFactory factory = new WindowsFactory();
Button button = factory.createButton();
TextField textField = factory.createTextField();
button.click();
textField.input("Hello");练习题
- 抽象工厂和工厂方法的区别?
- 如何扩展新的产品族?
- 抽象工厂模式的应用场景?