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

java设计模式--观察者模式应用场景

2017-02-17 16:07 816 查看
观察者分为两种模式:推和拉

推模型是假定知道观察者需要什么数据,传这个数据过去;拉模型是不知道观察者需要什么数据,干脆把自身传给他,按需取值

应用场景如下:

订阅火车票之后,需要记录日志,也需要发送短信

如果常规写法,在订阅火车票内部实现,若以后还需要增加新功能则需要修改核心代码

推模式实现:

client.java 传的"ok"可以是任意字符串,也可以是subject的某一个字段,若为拉模式,只需要改为change(this)即可。

public static void main(String[] args) {
Subject subject=new Subject();
LogObservers observer=new LogObservers();
MessageObservers observers=new MessageObservers();

subject.addObservers(observer);
subject.addObservers(observers);

subject.change("ok");

}subject.java
public class Subject {

private List<Object> list = new ArrayList<Object>();

public void addObservers(Object object) {
list.add(object);
}

public void removeObservers(Object object) {
list.remove(object);
}

public void change(String state) {
System.out.println("观察者改变了!");
for(Object object : list ) {
if(object instanceof LogObservers)
{
((LogObservers)object).doWork(state);
}else{
((MessageObservers)object).doWork(state);
}
}
}
}接口
public interface ITicketObserver {

public void doWork(String state);
}短信观察者
public class MessageObservers implements ITicketObserver {

@Override
public void doWork(String state) {
System.out.println("短信操作开始!更新状态"+state);
}

}日志观察者
public class LogObservers implements ITicketObserver {

@Override
public void doWork(String state) {
System.out.println("日志文件操作开始!更新状态"+state);
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java设计模式