打字猴:1.700469446e+09
1700469446
1700469447 ❑ConcreteObserver具体的观察者
1700469448
1700469449 每个观察在接收到消息后的处理反应是不同,各个观察者有自己的处理逻辑。
1700469450
1700469451 各个名词介绍完毕,我们来看看各自的通用代码,先看被观察者角色,如代码清单22-15所示。
1700469452
1700469453 代码清单22-15 被观察者
1700469454
1700469455 public abstract class Subject{
1700469456
1700469457 //定义一个观察者数组
1700469458
1700469459 private Vector<Observer>obsVector=new Vector<Observer>();
1700469460
1700469461 //增加一个观察者
1700469462
1700469463 public void addObserver(Observer o){
1700469464
1700469465 this.obsVector.add(o);
1700469466
1700469467 }
1700469468
1700469469 //删除一个观察者
1700469470
1700469471 public void delObserver(Observer o){
1700469472
1700469473 this.obsVector.remove(o);
1700469474
1700469475 }
1700469476
1700469477 //通知所有观察者
1700469478
1700469479 public void notifyObservers(){
1700469480
1700469481 for(Observer o:this.obsVector){
1700469482
1700469483 o.update();
1700469484
1700469485 }
1700469486
1700469487 }
1700469488
1700469489 }
1700469490
1700469491 被观察者的职责非常简单,就是定义谁能够观察,谁不能观察,程序中使用ArrayList和Vector没有太大的差别,ArrayList是线程异步,不安全;Vector是线程同步,安全——就这点区别。我们再来看具体的被观察者,如代码清单22-16所示。
1700469492
1700469493 代码清单22-16 具体被观察者
1700469494
1700469495 public class ConcreteSubject extends Subject{
[ 上一页 ]  [ :1.700469446e+09 ]  [ 下一页 ]