Skip to content

抽象工厂模式

意图

提供一个接口,用于创建一族相关或相互依赖的对象,而无需指定它们的具体类。强调产品族(如 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(); }
}

与工厂方法

抽象工厂内部往往多个工厂方法;扩展新产品族容易,扩展新产品种类(新增一种控件)需改所有工厂接口与实现。

下一节:建造者模式