工厂三姐妹——创建型设计模式之二
最后更新于:2022-04-01 09:29:54
## 一、简单工厂
简单工厂是面向对象编程的起步设计模式,用到面向对象设计的三大特性:封装,继承,多态来进行设计是必须的。
封装:使业务逻辑和界面逻辑分离,做到代码复用,而不是复制。
继承:将在同一类中进行的逻辑操作,抽象出一个类或者接口,统一定义,通过子类进行不同的实现。这样对象之间的修改就变得独立,不会影响到其他类,降低了对象间的耦合。
多态:通过给同类Things定义接口或抽象类,由子类继承实现统一父类方法,但不同的子类又有不同实现,将继承和多态演绎完成。
1、简单工厂解决的问题
原来这些业务都在同一个类中,我们通过传入参数,来判断具体调用哪个函数,现在我们把这些类都一个个独立封装起来,问题出现了,
我们应该怎样从客户端调用具体要实现的业务逻辑类呢???
这时候该简单工厂上场了。在工厂中根据客户端传入参数来决定要实例化的对象。
定义一个工厂类,负责创建实例过程。通过这个工厂,我们将客户端和业务逻辑类进行联系。
当然作为联系者,当然定义中就要需要知道所有的业务逻辑类,所以在类图中,你会发现是工厂类依赖逻辑类哦!
**2、类图**
![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-02-18_56c5ce7068e89.png)
## 二、工厂模式
1、工厂模式
工厂方法模式:定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类。
2、工厂模式的出现
简单工厂模式通过一个工厂类实现了客户端对具体调用类的实例化。那么大家都知道简单工厂中的工厂类是通过客户端传入参数,由条件语句进行判断后决定实例化哪个类的。那是不是您也有这样的疑问呢?面向对象技术要做到尽可能的封装性好,一个类修改,增删,不影响到其他类。那在简单工厂模式中,工厂类中要修改或增加一个操作,都必须打开这个工厂类,那么工厂类中的所有运算我就可以一览无遗了,是不是这里就封装不严了呢?
工厂类封装不严怎么办?
还是由简单模式的二姐(还有大姐哦),工厂模式来给她完善吧!
工厂模式将面向对象理解的很到位,既然封装不严,那么我们就给抽象工厂也分出一个层次了来,抽象出一个接口,然后把这些分支判断语句转换成一个个小的子类来实现工厂接口。是不是跟业务逻辑的封装是如出一辙呢?
这样我们就把原来需要再工厂类中要判断的条件语句转移到客户端,虽然还得判断需要实例化哪个,但是这些都是跟界面打交道的代码,我们都放在客户端中处理,不会影响到内层业务,且以后要增加运算,我们只需增加运算类,对应的指向运算类的工厂,不会干扰到其他类,这样的业务结构是牢固的,我们所期待的。
3、类图
![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-02-18_56c5ce707e5ca.png)
## 三、抽象工厂
详情请见上篇博客:[抽象工厂](http://blog.csdn.net/wangyongxia921/article/details/8432186)。
[作者信息](http://wyx-921.blog.163.com/)