1700469628
设计模式之禅 22.4 观察者模式的扩展
1700469629
1700469630
22.4.1 Java世界中的观察者模式
1700469631
1700469632
细心的你可能已经发现,HanFeiZi这个实现类中应该抽象出一个父类,父类完全作为被观察者的职责,每一个被观察者只实现自己的逻辑方法就可以了,如此则非常符合单一职责原则。是的,是的,确实是应该这样。幸运的是,Java从一开始诞生就提供了一个可扩展的父类,即java.util.Observable,这个类就是为那些“暴露狂”准备的,他们老是喜欢把自己的状态变更让别人去欣赏,去触发,这正符合了我们现在的要求,要把韩非子的所有活动都暴露出去,并且想暴露给谁就给暴露给谁。我们打开Java的帮助文件看看,查找一下Observable是不是已经有这个类了?JDK中提供了:java.util.Observable实现类和java.util.Observer接口,也就是说我们上面写的那个例子中的Observable接口可以改换成java.util.Observale实现类了,如图22-6所示。
1700469633
1700469634
1700469635
1700469636
1700469637
图22-6 Java中的观察者类图
1700469638
1700469639
是不是又简单了很多?那就对了!然后我们看一下我们程序的变更,先看HanFeiZi的实现类,如代码清单22-20所示。
1700469640
1700469641
代码清单22-20 优化后的被观察者
1700469642
1700469643
public class HanFeiZi extends Observable,IHanFeiZi{
1700469644
1700469645
//韩非子要吃饭了
1700469646
1700469647
public void haveBreakfast(){
1700469648
1700469649
System.out.println(“韩非子:开始吃饭了……”);
1700469650
1700469651
//通知所有的观察者
1700469652
1700469653
super.setChanged();
1700469654
1700469655
super.notifyObservers(“韩非子在吃饭”);
1700469656
1700469657
}
1700469658
1700469659
//韩非子开始娱乐了
1700469660
1700469661
public void haveFun(){
1700469662
1700469663
System.out.println(“韩非子:开始娱乐了……”);
1700469664
1700469665
super.setChanged();
1700469666
1700469667
this.notifyObservers(“韩非子在娱乐”);
1700469668
1700469669
}
1700469670
1700469671
}
1700469672
1700469673
改变得不多,引入了一个java.util.Observable对象,删除了增加、删除观察者的方法,简单了很多,那我们再来看观察者的实现类,如代码清单22-21所示。
1700469674
1700469675
代码清单22-21 优化后的观察者
1700469676
[
上一页 ]
[ :1.700469627e+09 ]
[
下一页 ]