1700457861
设计模式之禅 第9章 抽象工厂模式
1700457862
1700457864
9.1 女娲的失误
1700457865
1700457866
第8章讲了女娲造人的故事。人是造出来了,世界也热闹了,可是低头一看,都是清一色的类型,缺少关爱、仇恨、喜怒哀乐等情绪,人类的生命太平淡了,女娲一想,猛然一拍脑袋,忘记给人类定义性别了,那怎么办?抹掉重来,于是人类经过一次大洗礼,所有的人种都消灭掉了,世界又是空无一物,寂静而又寂寞。
1700457867
1700457868
由于女娲之前的准备工作花费了非常大的精力,比如准备黄土、八卦炉等,从头开始建立所有的事物也是不可能的,那就想在现有的条件下重新造人,尽可能旧物利用嘛。人种(Product产品类)应该怎么改造呢?怎么才能让人类有爱有恨呢?是神仙当然有办法了,定义互斥的性别,然后在每个个体中埋下一颗种子:异性相吸,成熟后就一定会去找个异性(这就是我们说的爱情原动力)。从设计角度来看,一个具体的对象通过两个坐标就可以确定:肤色和性别,如图9-1所示。
1700457869
1700457870
1700457871
1700457872
1700457873
图9-1 肤色性别坐标图
1700457874
1700457875
产品类分析完毕了,生产的工厂类(八卦炉)该怎么改造呢?只有一个生产设备,要么生产出来的全都是男性,要么都是女性。那不行呀,这么翻天覆地的改造就是为了产生不同性别的人类。有办法了!把目前已经有的生产设备——八卦炉拆开,于是女娲就使用了“八卦复制术”,把原先的八卦炉一个变两个,并且略加修改,就成了女性八卦炉(只生产女性人种)和男性八卦炉(只生产男性人种),于是乎女娲就开始准备生产了,其类图如图9-2所示。
1700457876
1700457877
1700457878
1700457879
1700457880
图9-2 女娲重新生产人类
1700457881
1700457882
这个类图虽然大,但是比较简单。Java的典型类图,一个接口,多个抽象类,然后是N个实现类,每个人种都是一个抽象类,性别是在各个实现类中实现的。特别需要说明的是HumanFactory接口,在这个接口中定义了三个方法,分别用来生产三个不同肤色的人种,也就是我们在图9-1中的Y坐标,它的两个实现类分别是性别,也就是图9-1中的X坐标,通过X坐标(性别)和Y坐标(肤色)唯一确定了一个生产出来的对象。我们来看看相关的实现,Human接口如代码清单9-1所示。
1700457883
1700457884
代码清单9-1 人种接口
1700457885
1700457886
public interface Human{
1700457887
1700457888
//每个人种都有相应的颜色
1700457889
1700457890
public void getColor();
1700457891
1700457892
//人类会说话
1700457893
1700457894
public void talk();
1700457895
1700457896
//每个人都有性别
1700457897
1700457898
public void getSex();
1700457899
1700457900
}
1700457901
1700457902
人种有三个抽象类,负责人种的抽象属性定义:肤色和语言。白色人种、黑色人种、黄色人种分别如代码清单9-2、代码清单9-3、代码清单9-4所示。
1700457903
1700457904
代码清单9-2 白色人种
1700457905
1700457906
public abstract class AbstractWhiteHuman implements Human{
1700457907
1700457908
//白色人种的颜色是白色的
1700457909
[
上一页 ]
[ :1.70045786e+09 ]
[
下一页 ]