版权声明:本文为 newtrekWang 原创文章,可以随意转载,但必须在明确位置注明出处!!!

参考

  • 《设计模式:可复用面向对象软件的基础 》3.3 Factory method 对象创建型模式
  • 《Android源码设计模式解析与实战》第5章 应用最广泛的模式--工厂方法模式

意图

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

别名

虚构造器

适用性

  • 当一个类不知道它所必须创建的对象的类的时候
  • 当一个类希望由它的子类来指定它所创建的对象的时候
  • 当类将创建对象的职责委托给多个帮助子类中的某一个,并且你希望将哪一个帮助子类是代理者这一信息局部化的时候。

结构

结构

角色

  • Product 定义工厂方法所创建的对象的接口
  • ConcreteProduct 实现Product接口
  • Factory 声明工厂方法,该方法返回一个Product类型的对象,也可以定义一个默认实现,返回一个默认的ConcreteProduct对象
  • ConcreteFactory 重定义工厂方法以返回一个ConcreteProduct对象

协作

Factory依赖于它的子类来实现工厂方法,所以它返回一个合适的ConcreteProduct实例。

简单代码实现

执行结果:

如果想要使用产品B,简单的方法是新建个ProductFactoryB类

客户端使用ProductBFactory即可

改进

每个具体的Product都对应一个Factory类未免使得类文件太多了,可以试试Java的反射,把具体的对象的创建都放在一个createProduct方法中。

例子:

执行结果:

简化

如果具体工厂类只有一个,可以简化掉抽象工厂类,不然就是多工厂方法模式。

应用例子1 List和Set中的iterator()方法

应用例子2 Android 组件中的onCreate,onCreateView这种方法

应用例子3 序列化工具 IOHandler

Android中数据持久化由多种方式,不外乎都是增删改查,我们可以将每一种数据操作的方式作为一个产品类,在抽象产品类中定义操作的方法。

结构图

结构图

Hits: 8

分类: 设计模式

发表评论

电子邮件地址不会被公开。 必填项已用*标注