Java设计模式之观察者模式(Observer)

观察者模式

在Java的设计模式中有一种叫做观察者模式。观察者,顾名思义,就是观察某事某物的变化并作出反应。
在程序中也可以使用观察者,首先定义一个观察者接口:

public interface Observer {
//其中只定义了一个更新的方法,可以不用参数。
  public void update(int i);
}

定义了观察者,还需要定义观察者所观察的内容:

import java.util.ArrayList;
public abstract class Subject{
  ArrayList<Observer> list;
  public Subject(){
    init();
  }
  public void init(){
    list = new ArrayList<Observer>();
  }
  public void attach(Observer observer){
    if(observer!=null)list.add(observer);
  }
  public void Detach(Observer observer){
    if(observer!=null)list.remove(observer);
  }
  //可以保留空白留待具体的主题来进行操作
  public void notifyData(){
    Observer observer;
    //通知所有的观察者
    for(int i = 0 ; i < list.size() ; i++){
      observer = list.get(i);
      observer.update(i);
    }
  }
}

使用观察者的接口可以构建出具体的观察者,并完成相应的功能:

public class ConcreteObserver implements Observer{
  private String name;
  public ConcreteObserver(){
    name = "";
  }
  public ConcreteObserver(String name){
    if(name!=null)this.name = name;
    else name = "";
  }
  //继承的方法
  public void update(int i){
    System.out.println(name + " has been notify");
  }
}

定义具体的观察内容、主题:

public class ConcreteSubject extends Subject{
  public ConcreteSubject(){
    super();
  }
  //在具体的主题中通知所有的观察者
  public void notifyData(){
    Observer observer;
    for(int i = list.size() ; i > 0 ; i--){
      observer = list.get(i-1);
      observer.update(i);
    }
  }
}

以上部分就是观察者的内容,只需在主题中添加观察者,运行程序时如果主题有更新,那么所有的观察者都会获得更新。
为什么要使用观察者呢?
使用观察者有利于类的解耦,在建立视图时,视图是常常有更新的,如果每次更新都要一个个的通知与视图有关的类或对象,在程序的执行过程中是不方便的,也不利于程序员对程序的调试维护。
使用观察者时,所有的更新逻辑都使用专门的类来维护,对程序的维护更为简单。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值