Appearance
工厂方法模式
意图
定义创建对象的接口,让子类决定实例化哪一个类。工厂方法把实例化推迟到子类,对扩展新产品更友好(开闭原则)。
类图
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子类或独立工厂类)。 - 不希望客户端依赖具体产品类名。
下一节:抽象工厂模式