Simple Factory Pattern(简单工厂模式)
GoF中认为简单工厂模式是工厂方法的一个特例。
例子
优缺点
优点:
优点:
简单,结合单例模式更加方便和节省资源。
缺点:
增加新的产品时,需要修改工厂类的if…else逻辑,不符合开闭原则。
Factory Method Pattern(工厂方法模式)
意图
定义一个用于创建对象的接口,让子类决定实例化哪一个类。Factory Method 使一个类的实例化延迟到其子类。
• 当一个类不知道它所必须创建的对象的类的时候。
• 当一个类希望由它的子类来指定它所创建的对象的时候。
• 当类将创建对象的职责委托给多个帮助子类中的某一个,并且你希望将哪一个帮助子类是代理者这一信息局部化的时候。
参与者:
• Product(抽象产品)
— 定义工厂方法所创建的对象的接口。
• ConcreteProduct(具体产品)
— 实现Product接口。
• Creator(抽象工厂类)
— 声明工厂方法,该方法返回一个 Product类型的对象。 Creator也可以定义一个工厂方 法的缺省实现,它返回一个缺省的 ConcreteProduct对象。
— 可以调用工厂方法以创建一个 Product对象。
• ConcreteCreator(具体工厂类)
— 重定义工厂方法以返回一个 ConcreteProduct实例。
优缺点
优点:
首先,良好的封装性,代码结构清晰。一个对象创建是有条件约束的,如一个调用者需要一个具体的产品对象,只要知道这个产品的类名(或约束字符串)就可以了,不用知道创建对象的艰辛过程,降低模块间的耦合。
工厂方法模式是典型的解耦框架。高层模块只需要知道产品的抽象类,其他的实现类都不用关心,符合迪米特法则,我不需要的就不要去交流;也符合依赖倒置原则,只依赖产品类的抽象;当然也符合里氏替换原则,使用产品子类替换产品父类,没问题!