打字猴:1.700469116e+09
1700469116
1700469117 //通知李斯
1700469118
1700469119 this.liSi.update(“韩非子在吃饭”);
1700469120
1700469121 }
1700469122
1700469123 //韩非子开始娱乐了
1700469124
1700469125 public void haveFun(){
1700469126
1700469127 System.out.println(“韩非子:开始娱乐了……”);
1700469128
1700469129 this.liSi.update(“韩非子在娱乐”);
1700469130
1700469131 }
1700469132
1700469133 }
1700469134
1700469135 韩非子HanFeiZi实现类就把接口的两个方法实现就可以了,在每个方法中调用LiSi.update()方法,完成李斯观察韩非子的职责,李斯的接口和实现类都没有任何改变,请参考代码清单22-3、22-4。我们再来看看Client程序的变更,如代码清单22-8所示。
1700469136
1700469137 代码清单22-8 通过聚集方式的场景类
1700469138
1700469139 public class Client{
1700469140
1700469141 public static void main(String[]args){
1700469142
1700469143 //定义出韩非子
1700469144
1700469145 HanFeiZi hanFeiZi=new HanFeiZi();
1700469146
1700469147 //然后我们看看韩非子在干什么
1700469148
1700469149 hanFeiZi.haveBreakfast();
1700469150
1700469151 //韩非子娱乐了
1700469152
1700469153 hanFeiZi.haveFun();
1700469154
1700469155 }
1700469156
1700469157 }
1700469158
1700469159 李斯就不用在场景类中定义了,非常简单,运行结果相同,不再赘述。
1700469160
1700469161 我们思考一下,修改后的程序运行结果正确,效率也比较高,是不是应该乐呵乐呵了?大功告成了?稍等等,你想在战国争雄的时候,韩非子这么有名望、有实力的人,就只有秦国关心他吗?想想也不可能呀,确实有一大帮的各国类似于李斯这样的人在看着他,监视着他的一举一动,但是看看我们的程序,你在HanFeiZi这个类中定义:
1700469162
1700469163 private ILiSi liSi=new LiSi();
1700469164
1700469165 这样一来只有李斯才能观察到韩非子,这是不对的,也就是说韩非子的活动只通知了李斯一个人,这不可能;再者说了,李斯只观察韩非子的吃饭、娱乐吗?政治倾向不关心吗?思维倾向不关心吗?杀人放火不关心吗?也就说韩非子的一系列活动都要通知李斯,这可怎么办?要按照上面的例子,我们如何修改?这和开闭原则严重违背呀,我们的程序有问题,修改如图22-4所示。
[ 上一页 ]  [ :1.700469116e+09 ]  [ 下一页 ]