首页 > 编程 > Java > 正文

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

2019-11-08 03:13:33
字体:
来源:转载
供稿:网友

观察者分为两种模式:推和拉

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

应用场景如下:

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

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

推模式实现:

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


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表