Appearance
抽象工厂模式
意图
提供一个接口,用于创建一族相关或相互依赖的对象,而无需指定它们的具体类。强调产品族(如 Windows 风格 UI 一整套)。
类图
Java 示例
java
public interface Button { void paint(); }
public interface Checkbox { void paint(); }
public class WinButton implements Button {
public void paint() { System.out.println("Win button"); }
}
public class WinCheckbox implements Checkbox {
public void paint() { System.out.println("Win checkbox"); }
}
public class MacButton implements Button {
public void paint() { System.out.println("Mac button"); }
}
public class MacCheckbox implements Checkbox {
public void paint() { System.out.println("Mac checkbox"); }
}
public interface GuiFactory {
Button createButton();
Checkbox createCheckbox();
}
public class WinGuiFactory implements GuiFactory {
public Button createButton() { return new WinButton(); }
public Checkbox createCheckbox() { return new WinCheckbox(); }
}
public class MacGuiFactory implements GuiFactory {
public Button createButton() { return new MacButton(); }
public Checkbox createCheckbox() { return new MacCheckbox(); }
}与工厂方法
抽象工厂内部往往多个工厂方法;扩展新产品族容易,扩展新产品种类(新增一种控件)需改所有工厂接口与实现。
下一节:建造者模式