中华文化博大精深,首先体现为中国的文字。很多时候一字之差就能谬之千里。今天真的是领会到了:简单工厂和工厂方法。从字面上看这两个短语并没有太大差别,可是在设计模式中,这两字之差带来的结果却不是那么微妙。
既然说到这两个名称的差别,我们就重点比较一下它们。先来看一下工厂方法模式。
一、工厂方法模式
工厂方法模式:定义一个用于创建对象的接口,让子类决定实例化哪一个类,工厂方法使一个类的实例化延迟到其子类。
二、形似的两种模式的比较
1.看两幅结构图
·简单工厂模式
·工厂方法模式
比较这两个结构图,我们会发现,每个结构图右侧的红色边框内有很大的区别,前者的简单工厂没有子类,只有一些逻辑判断代码;而后者却又重新分出四个具体的工厂。到这里,两种模式的区别之一就出来了。那么,工厂方法模式中的逻辑判断代码在哪里呢?答案是:客户端。因为,在前一种模式中,要想修改添加功能就必须在工厂类中进行修改,而后者是修改客户端。
2.通过上面的比较我绘制了一个表格:
从上面的表格中总结如下:
(1)联系:
都有运算类、客户端,其中运算类都有相应的子类。
(2)区别
最明显:工厂方法模式需要有一个工厂接口。
其次,工厂方法模式关于工厂类处是具体的工厂而不是一个简单的工厂类。
最后,添加功能时,前者改动的是工厂类(为工厂类添加相关功能的子类),后者改动的是客户端(为相应功能增加判断逻辑的代码)。
用实例(计算器)说明就是:
(1)都有运算类(包括加减乘除四个子类)、都需要一个客户端
(2)工厂方法模式中的工厂类处,产生与运算类的子类相对应的四个具体的工厂:加法工厂、减法工厂、乘法工厂和除法工厂。
(3)代码中要构建一个工厂接口,然后四个具体工厂去实现这个接口。
这两者的比较就先到这里,该向下一站动身了!