1700476159
30.1 工厂方法模式VS建造者模式
1700476160
1700476161
工厂方法模式注重的是整体对象的创建方法,而建造者模式注重的是部件构建的过程,旨在通过一步一步的精确构造创建出一个复杂的对象。我们举个简单例子来说明两者的差异,如要制造一个超人,如果使用工厂方法模式,直接产生出来的就是一个力大无穷、能够飞翔、内裤外穿的超人;而如果使用建造者模式,则需要组装手、头、脚、躯干等部分,然后再把内裤外穿,于是一个超人就诞生了。纯粹使用文字来描述比较枯燥,我们还是通过程序来更加清晰地认识两者的差别。
1700476162
1700476163
30.1.1 按工厂方法建造超人
1700476164
1700476165
首先,按照工厂方法模式创建出一个超人,类图如图30-1所示。
1700476166
1700476167
1700476168
1700476169
1700476170
图30-1 按工厂方法建造超人
1700476171
1700476172
类图中我们按照年龄段把超人分为两种类型:成年超人(如克拉克、超能先生)和未成年超人(如Dash、Jack)。这是一个非常正宗的工厂方法模式,定义一个产品的接口,然后再定义两个实现,通过超人制造工厂制造超人。想想看我们对超人最大印象是什么?当然是他的超能力,我们以specialTalent(特殊天赋)方法来代表,先看抽象产品类,如代码清单30-1所示。
1700476173
1700476174
代码清单30-1 超人接口
1700476175
1700476176
public interface ISuperMan{
1700476177
1700476178
//每个超人都有特殊技能
1700476179
1700476180
public void specialTalent();
1700476181
1700476182
}
1700476183
1700476184
产品的接口定义好了,我们再来看具体的产品。先看成年超人,很简单,如代码清单30-2所示。
1700476185
1700476186
代码清单30-2 成年超人
1700476187
1700476188
public class AdultSuperMan implements ISuperMan{
1700476189
1700476190
//超能先生
1700476191
1700476192
public void specialTalent(){
1700476193
1700476194
System.out.println(“超人力大无穷”);
1700476195
1700476196
}
1700476197
1700476198
}
1700476199
1700476200
未成年超人的代码如代码清单30-3所示。
1700476201
1700476202
代码清单30-3 未成年超人
1700476203
1700476204
public class ChildSuperMan implements ISuperMan{
1700476205
1700476206
//超能先生的三个孩子
1700476207
[
上一页 ]
[ :1.700476158e+09 ]
[
下一页 ]