1700469860
1700469861
letterProcess.letterInotoEnvelope();
1700469862
1700469863
//跑到邮局把信塞到邮箱,投递
1700469864
1700469865
letterProcess.sendLetter();
1700469866
1700469867
}
1700469868
1700469869
}
1700469870
1700469871
运行结果如下所示:
1700469872
1700469873
填写信的内容……Hello,It’s me,do you know who I am?I’m your old lover.I’d like to……
1700469874
1700469875
填写收件人地址及姓名……Happy Road No.666,God Province,Heaven
1700469876
1700469877
把信放到信封中……
1700469878
1700469879
邮递信件……
1700469880
1700469881
我们回过头来看看这个过程,它与高内聚的要求相差甚远,更不要说迪米特法则、接口隔离原则了。你想想,你要知道这4个步骤,而且还要知道它们的顺序,一旦出错,信就不可能邮寄出去,这在面向对象的编程中是极度地不适合,它根本就没有完成一个类所具有的单一职责。
1700469882
1700469883
还有,如果信件多了就非常麻烦,每封信都要这样运转一遍,非得累死,更别说要发个广告信了,那怎么办呢?还好,现在邮局开发了一个新业务,你只要把信件的必要信息告诉我,我给你发,我来完成这4个过程,只要把信件交给我就成了,其他就不要管了。非常好的方案!我们来看类图,如图23-2所示。
1700469884
1700469885
1700469886
1700469887
1700469888
图23-2 增加现代化邮局的类图
1700469889
1700469890
这还是比较简单的类图,增加了一个ModenPostOffice类,负责对一个比较复杂的信件处理过程的封装,然后高层模块只要和它有交互就成了,如代码清单23-4所示。
1700469891
1700469892
代码清单23-4 现代化邮局
1700469893
1700469894
public class ModenPostOffice{
1700469895
1700469896
private ILetterProcess letterProcess=new LetterProcessImpl();
1700469897
1700469898
//写信,封装,投递,一体化了
1700469899
1700469900
public void sendLetter(String context,String address){
1700469901
1700469902
//帮你写信
1700469903
1700469904
letterProcess.writeContext(context);
1700469905
1700469906
//写好信封
1700469907
1700469908
letterProcess.fillEnvelope(address);
1700469909
[
上一页 ]
[ :1.70046986e+09 ]
[
下一页 ]