之前我有写过简单工厂模式,那么这次我来说说工厂模式,工厂模式理解起来其实很简单,以之前我举过的计算器实现例子来说,简单工厂模式设计就是:
1、首先定义运算类接口
2、然后加减乘除等运算继承运算类,实现运算方法
3、然后定义一个简单工厂类方法,根据不同的运算,调用不同的运算方法
4、最后客户端调用运算类中的方法,以此来调用运算方法。
UML结构图如下:
工厂模式
那么工厂模式是怎么样的?工厂模式稍微复杂一点:
1、首先定义一个运算类接口
2、然后加减乘除等运算类继承运算类接口,实现运算方法
3、然后定义工厂类接口
4、然后加减乘除等运算工厂类继承工厂类,实现工厂类方法
5,然后加减运算类工厂,返回对应的运算类
6、最后客户端调用工厂类中的方法,以此来调用运算方法。
UML结构图如下:
这里我简单说下工厂模式的定义:定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类。
工厂方法模式的UML图如下所示:
简单工厂模式 VS 工厂模式
我们再来比较一下简单工厂模式与工厂模式:
简单工厂模式:简单工厂模式最大的优点在于工厂中包含了必要的逻辑判断,根据客户端的选择条件动态实例化相关的类,对于客户端来说,去除了具体产品的依赖类
工厂模式:工厂方法模式实现时,客户端需要决定实例化哪一个工厂来实现运算类,工厂方法把简单工厂的内部逻辑判断移到了客户端代码来进行。你想要加功能,本来是改工厂类的,现在变成了修改客户端类。
但是为什么我们有了简单工厂模式之后,还要使用工厂模式呢?
原因是:工厂模式克服了简单工厂模式开放-封闭的原则,又保持了封装对象创建过程的优点,降低了客户程序与产品对象的耦合。工厂方法模式是简单工厂模式的进一步抽象和推广。由于使用了多态性,工厂方法模式保留了简单工厂模式的优点,而且客服了他的缺点。但是工厂模式还有一个缺点,就是每加一个产品,就需要加一个产品工厂的类,增加额外的开发工作量。