1700469081
1700469082
李斯:汇报完毕
1700469083
1700469084
韩非子:开始娱乐了……
1700469085
1700469086
李斯:观察到李斯活动,开始向老板汇报了……
1700469087
1700469088
李斯:报告,秦老板!韩非子有活动了–>韩非子在娱乐
1700469089
1700469090
李斯:汇报完毕
1700469091
1700469092
结果出来,韩非子一吃早饭李斯就知道,韩非子一娱乐李斯也知道,非常正确!结果正确但并不表示你有成绩,我告诉你:你的成绩是0,甚至是负的!你有没有看到你的CPU飙升,Eclipse不响应状态?看到了?看到了你还不想为什么?!看看上面的程序,别的就不多说了,使用了一个死循环while(true)来做监听,要是用到项目中,你要多少硬件投入进来?你还让不让别人的程序运行了?!一台服务器就跑你这一个程序就完事!
1700469093
1700469094
错误也看到了,我们必须要修改,这个没法应用到项目中,而且这个程序根本就不是面向对象的程序,这完全是面向过程的,不改不行,怎么修改呢?我们来想,既然韩非子一吃饭李斯就知道了,那我们为什么不把李斯这个类聚集到韩非子那个类上呢?说改就改,立马动手,我们来看修改后的类图,如图22-3所示。
1700469095
1700469096
1700469097
1700469098
1700469099
图22-3 通过聚集方式监控
1700469100
1700469101
类图非常简单,就是在HanFeiZi类中引用了LiSi实例,看我们程序代码怎么修改,IHanFeiZi接口完全没有修改,可以参考代码清单22-1所示。我们来看实现类的修改,如代码清单22-7所示。
1700469102
1700469103
代码清单22-7 通过聚集方式的被观察者
1700469104
1700469105
public class HanFeiZi implements IHanFeiZi{
1700469106
1700469107
//把李斯声明出来
1700469108
1700469109
private ILiSi liSi=new LiSi();
1700469110
1700469111
//韩非子要吃饭了
1700469112
1700469113
public void haveBreakfast(){
1700469114
1700469115
System.out.println(“韩非子:开始吃饭了……”);
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
[
上一页 ]
[ :1.700469081e+09 ]
[
下一页 ]