Skip to content

工厂方法模式

意图

定义创建对象的接口,让子类决定实例化哪一个类。工厂方法把实例化推迟到子类,对扩展新产品更友好(开闭原则)。

类图

Java 示例

java
public interface Document {
    void open();
}

public class PdfDocument implements Document {
    public void open() { System.out.println("open pdf"); }
}

public class WordDocument implements Document {
    public void open() { System.out.println("open word"); }
}

public abstract class Application {
    public void newDocument() {
        Document doc = createDocument();
        doc.open();
    }
    protected abstract Document createDocument();
}

public class PdfApplication extends Application {
    @Override protected Document createDocument() { return new PdfDocument(); }
}

public class WordApplication extends Application {
    @Override protected Document createDocument() { return new WordDocument(); }
}

适用场景

  • 创建逻辑需要与产品类型一起扩展(每加一种文档格式加一个 Application 子类或独立工厂类)。
  • 不希望客户端依赖具体产品类名。

下一节:抽象工厂模式