Simple Factory Pattern(简单工厂模式)+Factory Method Pattern(工厂方法模式)

Simple Factory Pattern(简单工厂模式)

GoF中认为简单工厂模式是工厂方法的一个特例。

结构


Simple Factory Pattern(简单工厂模式)+Factory Method Pattern(工厂方法模式)_第1张图片

例子


Simple Factory Pattern(简单工厂模式)+Factory Method Pattern(工厂方法模式)_第2张图片


优缺点

 优点:

优点:

简单,结合单例模式更加方便和节省资源。

 缺点:

增加新的产品时,需要修改工厂类的if…else逻辑,不符合开闭原则。

Factory Method Pattern(工厂方法模式)

意图

定义一个用于创建对象的接口,让子类决定实例化哪一个类。Factory Method 使一个类的实例化延迟到其子类。

适用性

• 当一个类不知道它所必须创建的对象的类的时候。

• 当一个类希望由它的子类来指定它所创建的对象的时候。

• 当类将创建对象的职责委托给多个帮助子类中的某一个,并且你希望将哪一个帮助子类是代理者这一信息局部化的时候。

结构


Simple Factory Pattern(简单工厂模式)+Factory Method Pattern(工厂方法模式)_第3张图片

参与者:

• Product(抽象产品) 

— 定义工厂方法所创建的对象的接口。 

• ConcreteProduct(具体产品) 

— 实现Product接口。

• Creator(抽象工厂类) 

— 声明工厂方法,该方法返回一个 Product类型的对象。 Creator也可以定义一个工厂方 法的缺省实现,它返回一个缺省的 ConcreteProduct对象。 

— 可以调用工厂方法以创建一个 Product对象。 

• ConcreteCreator(具体工厂类) 

— 重定义工厂方法以返回一个 ConcreteProduct实例。 

例子


Simple Factory Pattern(简单工厂模式)+Factory Method Pattern(工厂方法模式)_第4张图片

优缺点

 优点:

首先,良好的封装性,代码结构清晰。一个对象创建是有条件约束的,如一个调用者需要一个具体的产品对象,只要知道这个产品的类名(或约束字符串)就可以了,不用知道创建对象的艰辛过程,降低模块间的耦合。

工厂方法模式是典型的解耦框架。高层模块只需要知道产品的抽象类,其他的实现类都不用关心,符合迪米特法则,我不需要的就不要去交流;也符合依赖倒置原则,只依赖产品类的抽象;当然也符合里氏替换原则,使用产品子类替换产品父类,没问题!

你可能感兴趣的:(Simple Factory Pattern(简单工厂模式)+Factory Method Pattern(工厂方法模式))