举例简述观察者模式(Observer)
2015-10-29 17:04
295 查看
常用设计模式———观察者模式
定义:一对多的依赖关系,让多个观察者同时监听某一个主题帮助。当该对象发生变化时,会通知所有观察者,使他们的状态自动发生变化。【如学生监听老师的动作,当老师发作业时,学生的动作根据作业来产生变化,并知道是哪位老师在布置作业。】
2、优点:减少对象之间的耦合,有利于系统的复用,并保证分工合作的高效
3、应用场合:如网站监听在线人数,并监听是什么用户在做什么动作,接着网站的某些动作随之变化
举例说明——
5、输出结果——(显示是哪个监听者对象在做什么事)
6、求职过程中,不管是笔试还是技术面,都经常会涉及常用的设计模式,在使用什么框架时加入什么设计模式,都是考验求职者能力的一步,普遍性很广。
定义:一对多的依赖关系,让多个观察者同时监听某一个主题帮助。当该对象发生变化时,会通知所有观察者,使他们的状态自动发生变化。【如学生监听老师的动作,当老师发作业时,学生的动作根据作业来产生变化,并知道是哪位老师在布置作业。】
2、优点:减少对象之间的耦合,有利于系统的复用,并保证分工合作的高效
3、应用场合:如网站监听在线人数,并监听是什么用户在做什么动作,接着网站的某些动作随之变化
举例说明——
package listener; public class Demo1 { /**观察者模式 * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub Person p=new Person(); p.register(new MyPersonListener(){ //注入监听器 //重写该接口的方法,学生开始跑,并能知道是哪位老师发指令 public void dorun(Event e){ Person p=e.getsource(); System.out.println(p+"跑步咯"); } public void doeat(Event e){ Person p=e.getsource(); System.out.println(p+"吃饭咯"); } }); p.eat(); } } class Person{ //观察者,类比学生 private MyPersonListener listener=null;//监听动作 public void run(){ if(listener!=null){ //当老师发指令,就触发dorun方法,加入event就知道是哪位老师发指令 listener.dorun(new Event(this)); } } public void eat(){ if(listener!=null){ listener.doeat(new Event(this)); System.out.println("事件2"); } } public void register(MyPersonListener listener){ this.listener=listener; } } //监听的对象——事件源(类比老师,这里有多个老师) class Event{ private Person source; public Event(Person source){ this.source=source; } public Person getsource(){ return this.source; } } //监听接口 interface MyPersonListener{ public void dorun(Event e); public void doeat(Event e); }
5、输出结果——(显示是哪个监听者对象在做什么事)
6、求职过程中,不管是笔试还是技术面,都经常会涉及常用的设计模式,在使用什么框架时加入什么设计模式,都是考验求职者能力的一步,普遍性很广。
相关文章推荐
- 使用python来做第一个简单的功能测试
- Ruby数据类型range用法总结
- [数据库原理]是不是先运行SELECT....FROM,再执行WHERE语句?
- 技术牛人到管理牛人的蜕变
- 重叠模型IO的优点
- contentprovider 总结(一)
- 空间triangle和AABB的相交判定方法
- 关于日期的相差值计算
- UIScrollView 实践经验
- iOS 公司开发者账号申请
- SWIFT——循环语句(for、while)
- Play Framework 完整实现一个APP(八)
- matches与equals
- 挖掘频繁模、关联和相关性(1)
- Gradle 使用Gradle构建Android应用的渠道包
- ACM竞赛中的逆向思维
- The superclass "javax.servlet.http.HttpServlet" was not found on the Java Build Path
- 最近的iOS技术开发文档教程之iOS中的手势及触摸
- UITableViewCell高亮时其子视图的状态修改
- xUtils在SDK6.0报错的问题