设计模式3-工厂方法 Factory Method

前言

FactoryMethod模式目是一种生成实例的规范。该模式构建一个生成实例的工厂,父类工厂决定实例的生成方式,但不决定所要生成的具体的类,具体的处理全部交给子类工厂。目的是将生成实例的框架(framework)和实际负责生成实例的类解耦。

实现

类结构:

产品父类,定义了产品是任意可以use的东西:

 工厂父类,定义了生产产品的方式,即先创建,再注册:

IDCard类,是一个具体的产品子类:

IDCardFactory,是一个专门生产IDCard的工厂子类:

使用:

 

登场角色

 FactoryMethod模式中的角色有四个,分为两方。

Product(产品)

属于“框架”这一方,是一个抽象类,定义了在Factory Method模式中生成的实例所必须持有的接口,但具体的处理由子类Concrete Product角色决定。代码中Product类扮演此角色。

Creator(创建者)

属于“框架”这一方,是负责创建Product角色的抽象类,但具体的处理由子类ConcreteCreator角色决定。代码中由Factory类扮演此角色。

Creator角色对具体负责生产实例的角色和具体的产品角色一无所知,它唯一知道的是只要调用创建实例的方法,就能生成Product角色的实例。不用new关键字生成实例,而是调用方法生成实例,这样做可以防止父类和其他具体类耦合。

Concrete Product(具体的产品)

属于“具体加工”这一方,它决定了具体的产品。代码中由IDCard类扮演此角色。

Concrete Creator(具体的创建者)

属于“具体加工”这一方,负责创建具体的产品,代码中由IDCardFactory类扮演此角色。

分析

如果我们想用相同的框架创建电视机实例,只需要在television包中编写Televison类和TelevisionFactory类即可,不需要修改framework包中的任何内容,即framework包不依赖于television包。

总结

在“如何生成实例”这一方面,FactoryMethod模式提供了生成实例的“框架”和“具体加工”,用工厂去生产产品。如果想用相同的框架得到其他的产品和工厂,那么只需要添加“具体加工”,而无需对“框架”做任何改动,从而降低了代码耦合。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值