观察者模式和监听模式
来源:互联网 发布:淘宝怎么修改好评评价 编辑:程序博客网 时间:2024/06/06 00:55
观察者模式和监听模式完成的都是一样的工作就是通知的作用。我们现在试想一个案例,一个士兵在发现敌人之后需要报告长官。好的我们现在来着手写
Pawn 类
package test;import java.util.ArrayList;import java.util.List;public class Pawn { private List<Leader> leaders=new ArrayList<>(); public void attach(Leader l){ leaders.add(l); } public void detach(Leader l){ leaders.remove(l); } public void standGuard( ){ System.out.println("Pawn: find enemies ,I wanna report Sir"); if(true/*find enemies*/){ for(Leader leader:leaders){ leader.order( "find enemies"); } } } public static void main(String args[]){ Pawn p=new Pawn(); p.attach(new Captain()); p.standGuard(); }}
Leader 类
package test;public interface Leader { public void order(String string);}
Captain类
package test;public class Captain implements Leader { @Override public void order(String msg) { // TODO Auto-generated method stub System.out.println("Captain:recevie a message:"+msg); }}
上面的源码就是观察者模式的简单实现。可以看见其实很简单。就是让一个类在触发某件事的时候去调用另一个类的方法
而监听模式就是在观察者和被观察者之间建立一座桥梁
leader和Caption类没有变
Pawn 类
package listener;import java.util.ArrayList;import java.util.List;public class Pawn { private List<Leader> leaders=new ArrayList<>(); private List<Listener> listeners=new ArrayList<>(); public Pawn(){ attach(new Captain()); addListener(new Listener(){ @Override public void handleEvent(EventString es) { // TODO Auto-generated method stub for(Leader leader:leaders){ leader.order(es.getMsg()); } } }); } public void attach(Leader l){ leaders.add(l); } public void detach(Leader l){ leaders.remove(l); } public void addListener(Listener l){ listeners.add(l); } public void removeListener(Listener l){ listeners.remove(l); } public void standGuard( ){ System.out.println("Pawn: find enemies ,I wanna report Sir"); if(true/*find enemies*/){ EventString e=new EventString("find enemies: type =footman"); for(Listener l:listeners){ l.handleEvent(e); } } } public static void main(String args[]){ Pawn p=new Pawn(); p.standGuard(); }}
listener类
package listener;public interface Listener { public void handleEvent(EventString e);}
EventString类
package listener;public class EventString { private String msg; public EventString(String msg) { super(); this.msg = msg; } public String getMsg() { return msg; } public void setMsg(String msg) { this.msg = msg; }}
我们可以发现 使用监听之后我们就可以分离观察者和被观察者了
阅读全文
0 0
- 观察者模式和监听模式
- 观察者模式和事件监听模式的区别
- 监听者—观察者模式
- 设计模式--观察者(监听)设计模式
- 设计模式--观察者(监听)设计模式
- 使用javascript模拟观察者模式和事件监听广播机制
- 详解java的事件监听机制和观察者设计模式
- C++ 两种设计模式:单例模式和观察者监听者模式
- 原型模式和观察者模式
- 适配器模式和观察者模式
- MVC模式和观察者模式
- 观察者模式 和 工厂模式
- 设计模式之观察者模式、监听者模式
- 观察者模式和监听器
- 委托和观察者模式
- 事件和观察者模式
- 观察者模式和事件
- 观察者和监听器模式
- ASP.NET Core Web API下事件驱动型架构的实现(一):一个简单的实现
- 闲话权限系统的设计
- svn
- Django源码分析3:处理请求wsgi分析与视图View
- JetClean绿色破解版下载及软件破解教程
- 观察者模式和监听模式
- Calendar 类
- java基础语法
- 多线程编程
- 求一个数到另一个数累加之和
- 介绍了webkit到webengine的和webengine中js和C++互相调用的方法
- centos7 git更新
- 8.1.1分析程序
- WebService的整理: