Android设计模式-4.2-工厂方法模式

191 阅读2分钟

1. 定义:

又称工厂模式、多态工厂模式和虚拟构造器模式;

此模式的核心精神是封装类中不变的部分,提取其中个性化善变的部分为独立类,通过依赖注入以达到解耦、复用和方便后期维护拓展的目的。它的核心结构有四个角色,分别是抽象工厂,具体工厂,抽象产品,具体产品;

简单工厂的弊端:
1.工厂类集中了所有实例(产品)的创建逻辑,一旦这个工厂不能正常工作,整个系统都会受到影响;
2.违背“开放 - 关闭原则”,一旦添加新产品就不得不修改工厂类的逻辑,这样就会造成工厂逻辑过于复杂;
3.简单工厂模式由于使用了静态工厂方法,静态方法不能被继承和重写,会造成工厂角色无法形成基于继承的等级结构;
工厂方法模式如何解决上述问题:

工厂方法模式把具体产品的创建推迟到工厂类的子类(具体工厂)中,此时工厂类不再负责所有产品的创建,而只是给出具体工厂必须实现的接口;

2. 适用场景

对于某个产品,调用者清楚地知道应该使用哪个具体工厂服务,实例化该具体工厂,生产出具体的产品来。Java Collection中的iterator() 方法即属于这种情况。

只是需要一种产品,而不想知道也不需要知道究竟是哪个工厂为生产的,即最终选用哪个具体工厂的决定权在生产者一方,它们根据当前系统的情况来实例化一个具体的工厂返回给使用者,而这个决策过程对于使用者来说是透明的。

3. Android源码中的体现如常用的Retrofit中的Converter.Factory ,CallAdapter.Factory即为抽象工厂类,它们的子类即为具体工厂类:

3. 实例演示

同样以宠物店买猫为例

1. 创建抽象猫类

2. 创建两个猫咪子类

前面这两步和简单工厂模式是一样的,工厂方法模式相对于简单工厂模式的最大优点就在于工厂类的可扩展性

3. 创建抽象工厂类

4. 创建两个具体工厂类

5. 具体使用

6. 也可以像下面这样用反射创建工厂类(需要知道要创建的具体实现类,耦合度高)

 我是今阳,如果想要进阶和了解更多的干货,欢迎关注公众号”今阳说“接收我的最新文章