工厂模式有三种:1、简单工厂。2、工厂。3、抽象工厂。
------------------------概述--------------------------------------------------------------------
简单工厂模式:
工厂类决定产出的产品类型,增加新类型需要修改工厂类。
工厂模式:
每一个产品类型对应一个不同的工厂实现类,一个工厂的接口方法产出固定的类型产品。示例1:
产品接口:文具产品实现类1:铅笔产品实现类2:橡皮
工厂接口:生产工厂实现类1:铅笔工厂(生产)工厂实现类2:橡皮工厂(生产)
客户端:铅笔工厂.生产()
抽象工厂模式:
工厂类的不同方法(抽象类方法)产生不同的产品类型。(一般采用抽象工厂的场景,会有多个工厂,以及对产品进行分类)和工厂模式相比,抽象工厂模式的核心点是:
示例2:产品又细分了一个维度(每个类型的产品可以产生多份),导致需要增加另一个维度的工厂,因此将原维度的多个工厂合并在一起成为一个工厂,此时不同的工厂,产生的是新维度的产品。
新增了一个产品品牌的工厂维度:
产品接口1:铅笔产品接口2:橡皮
产品实现类1:晨光铅笔产品实现类2:晨光橡皮产品实现类3:真彩铅笔产品实现类4:真彩橡皮
工厂接口1:品牌工厂(生产铅笔、生产橡皮)工厂实现类1:晨光工厂(生产晨光铅笔、生产晨光橡皮)工厂实现类2:真彩工厂(生产真彩铅笔、生产真彩橡皮)
客户端:晨光工厂.生产晨光铅笔()
-------------------------------------------------------------------------------------------------
1、简单工厂。(包括普通工厂、多个工厂、静态工厂)
一个工厂类生产不同的对象。一个产品接口,产品实现类。
优点:客户端不需要修改代码。
缺点: 当需要工厂产生新的对象类型的时候,必须要修改工厂类。
a、普通工厂,工厂类根据传入的参数判断生产的对象类型。
b、多个工厂,工厂类不同的方法生产不同的对象类型。
c、静态工厂,与多个工厂同结构,只是方法是静态方法。
2、工厂。
工厂模式,每个产品实现类,配套一个工厂实现类。工厂产出什么类型的产品在工厂内部决定,生产产品是调用工厂的接口方法(不同工厂调用的方法是一样的),所以一个工厂实现类的生产方法只能生产一个类型的产品。
优点:即使增加新的对象类型,也不需要修改工厂类,只需要新增一个对象类型的工厂实现类即可。缺点:增加新的对象类型,必须要修改客户端的代码(生成不同对象类型的工厂实例)。
3、抽象工厂。
抽象工厂模式,工厂的不同方法产生不同类型的产品,所以一个工厂可以产生多个不同类型的产品。