设计模式(四) 工厂模式

工厂模式主要分为三种

  • 工厂方法
  • 简单工厂
  • 抽象工厂

一、三种工厂模式

1、工厂方法

一个抽象产品类,可以派生出多个具体产品类。一个抽象工厂类,可以派生出多个具体工厂类。每个具体工厂类只能创建一个具体产品类的实例。

如下图:

Concrete Product 具有共同的父类Product ,Concrete Factory也具有共同的父类Factory。每个具体的子类Concrete Factory 产出一个对应的Concrete Product

2、简单工厂

定义:简单工厂模式又叫静态方法模式(因为工厂类定义了一个静态方法)

一个抽象产品类,可以派生出多个具体产品类。一个具体工厂类,通过往此工厂的static方法中传入不同参数,产出不同的具体产品类实例。通常内部通过switch语句判断该生产哪个对象,或者通过泛型+反射来生成对象。

如上图所示,Concrete Product 具有共同的父类Product。工厂类Factory只有一个,通过向Factory的static方法中传入不同的参数,得到返回的不同的Concrete Product

3、抽象工厂

多个抽象产品类,每个抽象产品类可以派生出多个具体产品类。 一个抽象工厂类,可以派生出多个具体工厂类。 每个具体工厂类可以创建多个具体产品类的实例。

抽象工厂模式引入抽象产品族Abstract Product 的概念,它是所有产品的父类,其下是Product抽象类,它是Abstract Product的子类,是具体产品类的父类,可有多种不同类型,如ProductA 、Product B,再往下,是具体的产品类 Concrete ProductA 、Concrete ProductB;

Concrete Factory 有共同的父类Abstract Factory。每个具体的Concrete Factory都可以生产多种不同产品。如Factory 1 可以生产Concrete ProductA1、Concrete Product B1,Factory 2可以生产Concrete A2、Concrete B2。

二、源码实际案例

1.简单工厂模式

BitmapFactory

创建bitmap不直接使用构造方法,而是通过工厂生成bitmap,这里不是通过静态方法生成bitmap,而是通过提供多个方法,不同的参数,来生成bitmap,但它也是属于简单工厂,因为只有一个工厂类BitmapFactory来直接生成bitmap

1
2
3
BitmapFactory.decodeFile()
BitmapFactory.decodeResource()
BitmapFactory.decodeStream()

https://zhuanlan.zhihu.com/p/70461633