观察者模式个人理解

观察者模式定义了一对多的依赖关系,让一个或多个观察者对象订阅一个主题对象。主题对象状态上或内容上的变化会通知观察者。主题对象及观察者对象拥有相对的独立性。

 

 与<策略模式个人理解>中相似,观察者对象实现了一个观察者接口,这样就把与主题对象独立开来。具体观察者的个数和内容可以自定义增加或者删除。

 

 主题是一个抽象类或者接口,有addObserver、deleteObserver、notifyObservers方法。具体的主题对象实现抽象主题。

  

 

 

public interface Observer{
  public void update(Observable obs,Object arg);
}

public class ConcreteObserver implements Observer{

  public void update(Observable obs,Object arg){

  //更新状态
  if(obs instanceof ConcreteObservable){
   ConcreteObservable observable = (ConcreteObservable)obs;
   System.out.println(obs.getMessage());
}
}
}

public interface Observable{
 public void addObserver(Observer ob);
 public void deleteObserver(Observer ob);
 public void notifyObservers(Object arg);
}
public class ConcreteObservable implements Observable{
 private ArrayList observers;
 private String message;
 public ConcreteObservable(){
  observers = new ArrayList();
}
 public void addObserver(Observer ob){
  observers.add(ob);
}
 public void deleteObserver(Observer ob){
 int i = observers.indexOf(ob);
 if(i>=0){
  observers.remove(i);
}
}
  public void notifyObservers(Object arg){
 for(int i =0;i<observer.size();i++){
  Observer observer = (Observer)observers.get(i);
  observer.update(this,arg);
}
}
public void setMessage(String message){
 this.message = message;
 notifyObservers(null);
}
 public String getMessage(){
  return message;
}
}

   需要指出的是观察者的update的方法接受主题对象obs,和内容对象arg。这样可以根据需求定制内容。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值