您的位置:首页 > 编程语言 > Java开发

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

2017-03-19 22:10 681 查看

观察者模式

在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);
}
}
}


以上部分就是观察者的内容,只需在主题中添加观察者,运行程序时如果主题有更新,那么所有的观察者都会获得更新。

为什么要使用观察者呢?

使用观察者有利于类的解耦,在建立视图时,视图是常常有更新的,如果每次更新都要一个个的通知与视图有关的类或对象,在程序的执行过程中是不方便的,也不利于程序员对程序的调试维护。

使用观察者时,所有的更新逻辑都使用专门的类来维护,对程序的维护更为简单。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java设计模式