稳固而知新 Observer

OBSERVER
该模式的动机是为了在增加新的观察对象时可以无需更改被观察的对象,被观察对象可以保持封闭。
public class Observable {
       List<Observer> observers = new ArrayList<Observer>();
       public boolean addObserver(Observer o) {
              observers.add(o);
       }
       private void fireObserver() {
              for (Observer o : observers) {
                     o.update();
              }
       }
}
         

Context是一个GUI应用程序的唯一上下文实例,用来和服务端交互信息。TaskView是用来显示当前系统的任务列表,它实现了Observer接口,通过Observable的addObserver方法注册到Context中。Context在收到服务端发出的更新命令时,就会调用observable的notify方法,notify方法会调用注册的Observer对象的update方法。执行TaskView的update方法时,TaskView会到到后台中取到所有的Task信息,显示在自己的界面上。
 
上面的例子是一个典型的拉模型,Observer的update被调用后,要自己去取得新的信息,可能的后果是无法分辨信息的实时性。下面的例子为fireObserver方法增加了一个Event参数,将最新的信息发送给Observer.Observer的派生类各自实现自己的业务功能。这是Observer模式的推模型。
      
 
       UserView和EMSView本别用来现实用户和Ems的列表,它们实现了Observer接口,并注册到Context中,Context受到服务端发来的Event信息,就会调用注册其中Observer的update方法,UserView和EMSView通过update接受到了Event消息,分别实现自己的需求。
       推模型比拉模型适应更复杂的情况。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值