3.2 工厂方法模式
工厂方法模式是什么?
工厂方法模式是针对每一种产品提供一个工厂类,通过不同的工厂实例来创建不同的产品实例。在同一等级结构中,支持增加任意产品。
UML类图如下:
注意:Factory不一定要用接口,也可以采用抽象类,反正能符合里氏替换原则就可以了,不要太注重形式。要注意的是怎么解决问题。
类图代码:
Product
public interface Product { public void operation1(); public void operation2(); }
ConcreateProductA
public class ConcreateProductA implements Product { public void operation1() { System.out.println("ConcreateProductA -> operation1"); } public void operation2() { System.out.println("ConcreateProductA -> operation2"); } }
ConcreateProductB
public class ConcreateProductB implements Product { public void operation1() { System.out.println("ConcreateProductB -> operation1"); } public void operation2() { System.out.println("ConcreateProductB -> operation2"); } }
Factory
public interface Factory { public Product create(); }
ConcreateFactoryA
public class ConcreateFactoryA implements Factory{ public Product create(){ return new ConcreateProductA(); } }
ConcreateFactoryB
public class ConcreateFactoryB implements Factory{ public Product create(){ return new ConcreateProductB(); } }
Client
public class Client { public static void main(String[] args) { Factory factoryA = new ConcreateFactoryA(); Product productA = factoryA.create(); productA.operation1(); productA.operation2(); Factory factoryB = new ConcreateFactoryB(); Product productB = factoryB.create(); productB.operation1(); productB.operation2(); } }
执行结果
工厂方法模式应用在哪些场景?
我们在前面讲述的简单工厂模式,一旦新增一种新的产品,则需要修改已有的代码,有没有办法不修改已有代码,而通过扩展来实现新产品的创建(使其符合开闭原则)。工厂方法模式就是为了解决这个问题的。如果新增一种新产品时,通过创建一个新的产品工厂来生产改新产品。不需要修改已有的产品工厂。