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

Java设计模式之观察者模式

2017-04-21 12:40 309 查看
什么是监听模式:

定义一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态发生变化时会通知所有观察者

使用监听模式可以解决什么问题?

下面我们通过一个需求来说明,现在我们向服务器请求某项数据,但是服务器需要向第三方设备请求且过程时间比较长,如果让用户一直等待这对用户体验来说是不好的,这时候我们就可以使用观察者模式,我们把请求发送出去然后添加一个监听,当服务器端将数据返回我们才通知用户。

主题对象接口

public interface ISubject {
//添加观察者
void addObserver(IObserver observer);
//移除一个观察者
void removeObserver(IObserver observer);
//通知所有观察者
void notifyObserver(String message);
}


主题对象

public class Subject implements ISubject {
//观察者列表
private ArrayList<IObserver> observers = new ArrayList<>();

public  Subject(){

}
public void request(final String message){
//模拟向服务器请求数据
new Thread(new Runnable() {
@Override
public void run() {
try {

Thread.sleep(2000);
notifyObserver("服务器返回数据:"+message);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}).start();
}

@Override
public void addObserver(IObserver observer) {
observers.add(observer);
}

@Override
public void removeObserver(IObserver observer) {
observers.remove(observer);
}

@Override
public void notifyObserver(String message) {
for (IObserver observer:observers){
observer.handleMessage(message);
}
}
}


观察者接口

public interface IObserver {
//主题对象通知
void handleMessage(String messsage);
}


观察者对象

public class Observer implements IObserver {

@Override
public void handleMessage(String messsage) {
//处理message
System.out.print("message:"+messsage);
}
}


客户端调用

//主题对象
Subject subject = new Subject();

//观察者,处理服务器返回
IObserver observer = new Observer();

//添加观察者
subject.addObserver(observer);

subject.request("请求数据");

//移除观察者
//        subject.removeObserver(observer);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: