工厂方法(Factory Method)
定义一个用于创建对象的接口,让子类决定实例哪一个类。
工厂方法使一个类的实例化延迟到其子类。在工厂方法模式中,核心的工厂类不再负责所有产品的创建,而是将具体创建的工作交给子类去做。这个核心工厂则变为抽象工厂角色,仅负责给出工厂子类必须实现的接口,而不接触哪一产品创建的细节。
工厂方法模式可以用来允许系统不修改具体工厂角色的情况下引进新产品
在工厂方法模式中,一般都有一个平行的等级结构,抽象工厂对应抽象产品,具体工厂对应具体产品
// 水果工厂
public interface FruitGardener { // 工厂接口
public Fruit factory();
}
// 苹果工厂
public class AppleGardener implements FruitGardener { // 工厂方法
public Fruit factory() {
Fruit f = new Apple();
System.out.println("水果工厂成功创建一个水果:苹果!");
return f;
}
}
// 草莓工厂
public class StrawberryGardener implements FruitGardener { // /工厂方法
public Fruit factory() {
Fruit f = new Strawberry();
System.out.println("水果工厂成功创建一个水果:草莓!");
return f;
}
}
// 测试类(客户端)
public class TestApp {
private FruitGardener f1, f2, f3;
private Fruit p1, p2, p3;
private void test() {
// 实力化水果工厂
f1 = new AppleGardener();
f3 = new StrawberryGardener();
// 从水果工厂生产水果
p1 = f1.factory();
p3 = f3.factory();
}
public static void main(String args[]) {
TestApp test = new TestApp();
test.test();
}
}