Factory Method
简单工厂的缺点对于“开-闭”原则的支持不够,因为如果有新的产品加入系统中,就要修改工厂类,将必要的逻辑加入工厂类中。
工厂方法模式是简单工厂模式的进一步抽象和推广。由于使用了多态,工厂方法模式保持了简单工厂模式的优点,也克服了它的缺点。
在工厂方法模式中,核心的工厂类不再是负责所有产品的创建,而是将具体的工作交予子类。核心类成为一个抽象工厂的角色,仅负责给出具体工厂子类必须实现的接口,而不接触哪一个产品来应当被实例化这种细节。
这种进一步抽象化的结果,使得工厂方法模式可以用来允许系统在不修改具体工厂角色的情况下引进新的产品。
- 抽象工厂(Creator):工厂方法模式的核心。
- 具体工厂(Contrete Creator):实现了抽象工厂接口,具体工厂含有应用密切的逻辑,并创建具体产品对象。
- 抽象产品(Product):工厂方法模式所创建的对象的超类。
- 具体产品(Contrete Product):实现了抽象产品的接口,是工厂模式所创建的具体产品。
1 public interface Creator 2 { 3 /* 4 * 工厂方法 5 * */ 6 public abstract Product factory(); 7 }
1 /* 2 * 标识接口 3 * */ 4 public interface Product 5 { 6 7 }
1 public class ContreteProduct1 implements Product 2 { 3 public ContreteProduct1(){ 4 //do someting 5 } 6 }
1 public class ContreteProduct2 implements Product 2 { 3 public ContreteProduct2(){ 4 //do someting 5 } 6 }
1 public class ContreteCreator1 implements Creator 2 { 3 @Override 4 public Product factory() 5 { 6 return new ContreteProduct1(); 7 } 8 }
1 public class ContreteCreator2 implements Creator 2 { 3 @Override 4 public Product factory() 5 { 6 return new ContreteProduct2(); 7 } 8 }
1 public static void main(String[] args) 2 { 3 Creator creator1, creator2; 4 Product product1, product2; 5 6 creator1 = new ContreteCreator1(); 7 product1 = creator1.factory(); 8 9 creator2 = new ContreteCreator2(); 10 product2 = creator2.factory(); 11 }