Factory Method模式

Factory Method模式的示例:
https://github.com/ConfuseCat/DesignPattern/tree/master/src/EntrustedtoSubclass/FactoryMethod

Factory Method模式原理

       在Template Method模式中,我们在父类中规定处理的流程,在子类中实现具体的处理。如果将该模式用于生成实例,就演变成了Factory Method模式。
       在Factory Method模式中,父类决定实例的生成方式,但并不决定所要生成的具体的类,具体的处理全部交给子类负责。这样就可以将生成实例的框架(framework)和实际负责生成实例的类解耦。

Factory Method模式中的角色

  1. Product(产品):
           Product角色属于框架这一方,是一个抽象类。定义了在Factory Method模式中生成的那些实例所持有的接口,但具体的处理则由子类ConcreteProduct角色决定。
  2. Creator(创建者):
           Creator角色属于框架这一方,它是负责生成Product角色的抽象类,但具体的处理则由子类ConcreteCreator角色决定。Creator角色对于实际负责生成实例的ConcretCreator角色一无所知,它唯一知道的就是,只要调用Product角色和生成实例的方法,就可以生成Product的实例。不用new关键字来生成实例,而是调用生成实例的专用方法来生成实例这样就可以防止父类与其他具体类耦合。
  3. ConcreteProduct(具体的产品):
           ConcreteProduct角色属于具体加工这一方,它决定了具体的产品。
  4. ConcreteCreator(具体的创建者):
           ConcreteCreator角色属于具体加工这一方,它负责生成具体的产品。

Factory Method模式类图

父类(框架)这一方的Creator和Product角色的关系和子类(具体加工)这一方的ConcreteCreator和ConcreteProduct角色的关系是平行的。
创建其它工厂和产品时,只需要导入框架就可以编写
父类

Factory Method模式的Creator角色生成实例——方法的三种实现

createProduct的方法的实现方式一般有以下三种

  1. 指定为抽象方式:指定为抽象方式后,子类就必须实现该方法
  2. 实现默认处理:实现默认处理后,如果子类没有实现该方法,将进行默认处理,不过因为是使用new关键字,Product类不能定义为抽象类
  3. 在其中抛出异常:createProduct方法的默认处理方法为抛出异常,如果未在子类中实现,程序就会在运行时出错,需要另外编写异常类
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值