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);
}
}
推模型是假定知道观察者需要什么数据,传这个数据过去;拉模型是不知道观察者需要什么数据,干脆把自身传给他,按需取值
应用场景如下:
订阅火车票之后,需要记录日志,也需要发送短信
如果常规写法,在订阅火车票内部实现,若以后还需要增加新功能则需要修改核心代码
推模式实现:
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设计模式(三) Visitor(访问者)模式及多分派场景应用
- Java设计模式之《桥接模式》及应用场景
- Java设计模式之《桥接模式》及应用场景
- Java常见设计模式应用场景
- java设计模式六大原则之场景应用分析
- Java设计模式之观察者模式的应用--简单的事件通知工具
- Java设计模式之《职责链模式》及应用场景
- Java设计模式之《适配器模式》及应用场景
- Java设计模式之《构建者模式》及应用场景
- Java设计模式之《观察者模式》及应用场景
- java设计模式的应用场景
- Java设计模式之《代理模式》及应用场景
- Java设计模式之《单例模式》及应用场景
- Java设计模式之《组合模式》及应用场景(遍历指定路径下的文件目录和文件为例子)
- java设计模式的应用场景(转)
- Java设计模式之《组合模式》及应用场景
- Java设计模式之《适配器模式》及应用场景
- 设计模式应用与发展之观察者模式(java)
- Java设计模式的常见应用场景
- Java设计模式之《代理模式》及应用场景