观察者模式个人理解
程序员文章站
2022-05-03 11:54:27
...
观察者模式定义了一对多的依赖关系,让一个或多个观察者对象订阅一个主题对象。主题对象状态上或内容上的变化会通知观察者。主题对象及观察者对象拥有相对的独立性。
与<策略模式个人理解>中相似,观察者对象实现了一个观察者接口,这样就把与主题对象独立开来。具体观察者的个数和内容可以自定义增加或者删除。
主题是一个抽象类或者接口,有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。这样可以根据需求定制内容。
上一篇: linux基础学习笔记
下一篇: 提交表单的时候会出现提交两次的问题