Skip to content

Files

Latest commit

db423ff · Aug 6, 2019

History

History
72 lines (45 loc) · 3.57 KB

factory.md

File metadata and controls

72 lines (45 loc) · 3.57 KB

设计模式 -- 工厂模式(简单工厂、工厂方法、抽象工厂)

定义

使用一个或一组相关或是相互依赖的对象提供一个接口去实现一个或一系列类的实例

简单工厂

工厂类(XXXFactory)拥有一个工厂方法(create),接受了一个参数,通过不同的参数实例化不同的产品类。

含义

属于创建型模式,又叫做静态工厂方法(Static Factory Method)模式,但不属于23种GOF设计模式之一。简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。简单工厂模式是工厂模式家族中最简单实用的模式,可以理解为是不同工厂模式的一个特殊实现。 -------------来自百度百科

使用场景

  • 工厂类负责创建的对象比较少。
  • 客户只知道传入工厂类的参数,对于如何创建对象(逻辑)不关心。

优缺点

  • 优点
    • 简单,通过一个含参的工厂方法,我们可以实例化任何产品类。
  • 缺点
    • 创建的类只能是事先考虑到的,如果需要添加新的类,则就需要改变工厂类了。
    • 当系统中的具体产品类不断增多时候,可能会出现要求工厂类根据不同条件创建不同实例的需求.这种对条件的判断和对具体产品类型的判断交错在一起,很难避免模块功能的蔓延,对系统的维护和扩展非常不利。

工厂方法

工厂方法针对每一种产品提供一个工厂类。通过不同的工厂实例来创建不同的产品实例。

含义

属于创建型模式,又叫做静态工厂方法(Static Factory Method)模式,但不属于23种GOF设计模式之一。简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。简单工厂模式是工厂模式家族中最简单实用的模式,可以理解为是不同工厂模式的一个特殊实现。 -------------来自百度百科

使用场景

  • 当一个类不知道它所需要的对象的类时。
  • 将创建对象的任务委托给多个工厂子类中的某一个,客户端在使用时可以无须关心是哪一个工厂子类创建产品子类,需要时再动态指定,可将具体工厂类的类名存储在配置文件或数据库中。

优缺点

  • 优点
    • 工厂模式可以说是简单工厂模式的进一步抽象和拓展,在保留了简单工厂的封装优点的同时,让扩展变得简单,让继承变得可行,增加了多态性的体现。
  • 缺点
    • 对于简单工厂来说较为复杂。
    • 只适用于一个具体产品。

Android 源码中的工厂方法模式的实现

Activity 的 OnCreate()

ArrayList 和 HashSet 中的 iterator 方法

抽象工厂

创建一组或是相互以来的对象提供一个接口,而不需要指定他们的具体类。

使用场景

  • 一个对象族有相同的约束时可以使用抽象工厂模式

优缺点

  • 优点
    • 分离接口与实现,客户端使用抽象工厂来创建需要的对象,而客户端根本就不知道具体的实现是谁,客户端只是面向产品的接口编程而已,使其从具体的产品实现中解耦,同时基于接口与实现分离,使抽象该工厂方法模式在切换产品类时更加灵活、容易。
  • 缺点
    • 对类文件的爆炸性增加。
    • 不太容易扩展新的产品类。

Android 源码中的工厂方法模式的实现

Android 底层对 MediaPlayer 的实现

MediaPlayer Factory分别会生成4个不同的MediaPlayer基类:StagefrightPlayer、NuPlayerDriver、MidiFile和TestPlayerStub,四者均继承于MediaPlayerBase。