工厂方法模式(Factory Method)


工厂方法模式(Factory Method),定义一个用于创建对象的接口,让子类决定实例化哪一个类,工厂模式使一个类的实例化延迟到其子类。

通常设计应该是从工厂方法模式开始,当设计者发现需要更大的灵活性时,设计便会向其他创建型模式演化。当设计者在设计标准之间进行权衡的时候,了解多个创建型模式可以给设计者更多的选择余地。

 

UML类图

 

FactoryMethod.png

工厂方法模式涉及到以下的角色:

  • 抽象工厂(Creator)角色:担任这个角色的是工厂方法模式的核心,它是与应用程序无关的。任何在模式中创建对象的工厂类必须实现这个接口。
  • 具体工厂(Concrete Creator)角色:担任这个角色的是实现了抽象工厂接口的具体类。具体工厂角色中含有与应用密切相关的逻辑,并且受到应用程序的调用以创建产品对象。
  • 抽象产品(Product)角色:工厂方法模式所创建的对象的超类型,也就是产品对象的共同父类或共同拥有的接口。
  • 具体产品(Concrete Product)角色:这个角色实现了抽闲产品角色所声明的接口。工厂方法模式所创建的每一个对象都是某个具体产品角色的实例

 

代码实现

Product接口

 

ConcreteProductA类

 

ConcreteProductB类

Creator接口

 

ConcreteCreatorA类

ConcreteCreatorB类

 

Client类

 

优点

  • 解决了简单工厂模式中会违背开闭原则的问题,如果增加对Product的实现类,只需要添加新的ConcreteProduct和ConcreteCreator即可

 

缺点

  • 工厂方法模式实现时,客户端需要决定实例化哪个工厂来实现运算类,选择判断的问题还是存在,也就是说,工厂方法把简单工厂的内部逻辑判断移到了客户端代码来进行。

 

参考文献

  • 《大话设计模式》 作者:程杰,清华大学出版社
  • 《Java与模式》 作者:阎宏,电子工业出版社

 

 

 

Categories: 设计模式