- 浏览: 346160 次
- 性别:
- 来自: 杭州
文章分类
- 全部博客 (160)
- webservice (2)
- 数据库开发 (9)
- LINUX (6)
- 团队协作 (5)
- 前端技术 (4)
- J2EE (31)
- web服务器 (9)
- 经验常识 (13)
- 开发工具 (17)
- 项目管理 (7)
- 重构与设计模式 (8)
- 安全技术 (1)
- 并发编程 (1)
- 移动互联网 (2)
- 编码风格 (1)
- 领域建模 (1)
- 随想杂记 (12)
- 翻译 (2)
- 问题排查 (2)
- 数据挖掘 (4)
- 软件架构 (1)
- java语言基础知识 (13)
- 文件读写 (1)
- mac研发笔记 (1)
- 网络问题 (1)
- python学习 (0)
- Java8新特性 (1)
- soft kes collections (1)
最新评论
-
cremains:
...
java8新特性学习笔记 -
bingyingao:
guooo 写道很好的总结,不知能否转载?可以,多谢关注
又四年了,再看如何快速融入一个新团队 -
guooo:
很好的总结,不知能否转载?
又四年了,再看如何快速融入一个新团队 -
omeweb:
又过了好几年了,有啥新感悟没有?
两年已过去,再看该如何快速融入新团队 -
kely39:
感谢楼主,问题已解决
包冲突问题的解决方法
观察者模式原理
观察者模式是对象行动模式,又叫做宣布-定义模式、模型-视图模式、源- *** 模式或附属者模式。
观察者模式定会以了一种一对多的依附关联,让多个观察者共事监听一个主题对象,这个主题在状态产生变更是,会通知所有观察者对象,使他们可能主动跟新自己。
观察者模式的构造
l 抽象主题(Subject)角色:主题角色把所有对视察者对象的援用保留在一个凑集(List)中,每个主题都能够有任何数目的观察者。抽象主题供给一个接口,可以增添跟删除察看者对象,主题角色又叫做形象被观察着角色,个别用一个抽象类或者一个接口实现
l 抽象观察者(Observer)角色:为所有具体观察者定义一个接口,在得到主题的通知时更新自己。这个接口又叫做更新借口。抽象观察者角色普通用一个抽象类或一个接口实现。
l 具体主题(ConcreteSubject)角色:将有关状态存入具体观察者对象,在具体的主题内部状态转变时,给所有登记过的观察者发出告诉。具体主题角色又叫做具体被观察着角色。
详细观察者(ConcreteObserver)角色:存储于主题状态自恰的状态。详细观察者角色实现抽象观察者角色所请求更新接口,以便使自身的状况与主题的状态相和谐 。
下面是一个观察者模式的代码示例,用观察者模式实现了关门打狗这一场景,设计不科学的地方希望网友指出来,一起进步:
运行代码,输出如下:
观察者1-关住笨笨
观察者2-打狗笨笨
观察者3-很打狗笨笨
说明观察者已经采取了行动...
观察者模式是对象行动模式,又叫做宣布-定义模式、模型-视图模式、源- *** 模式或附属者模式。
观察者模式定会以了一种一对多的依附关联,让多个观察者共事监听一个主题对象,这个主题在状态产生变更是,会通知所有观察者对象,使他们可能主动跟新自己。
观察者模式的构造
l 抽象主题(Subject)角色:主题角色把所有对视察者对象的援用保留在一个凑集(List)中,每个主题都能够有任何数目的观察者。抽象主题供给一个接口,可以增添跟删除察看者对象,主题角色又叫做形象被观察着角色,个别用一个抽象类或者一个接口实现
l 抽象观察者(Observer)角色:为所有具体观察者定义一个接口,在得到主题的通知时更新自己。这个接口又叫做更新借口。抽象观察者角色普通用一个抽象类或一个接口实现。
l 具体主题(ConcreteSubject)角色:将有关状态存入具体观察者对象,在具体的主题内部状态转变时,给所有登记过的观察者发出告诉。具体主题角色又叫做具体被观察着角色。
详细观察者(ConcreteObserver)角色:存储于主题状态自恰的状态。详细观察者角色实现抽象观察者角色所请求更新接口,以便使自身的状况与主题的状态相和谐 。
下面是一个观察者模式的代码示例,用观察者模式实现了关门打狗这一场景,设计不科学的地方希望网友指出来,一起进步:
package com; import java.util.ArrayList; import java.util.List; /** * 抽象观察者角色 * @author abing * */ interface ObserverRole { /** * 观察者接到通过之后做一系列业务操作 */ void doOperate(String dogName); } /** * 具体观察者角色1 * @author abing * */ class Observer1 implements ObserverRole { @Override public void doOperate(String dogName) { System.out.println("观察者1-关住"+dogName); } } /** * 具体观察者角色2 * @author abing * */ class Observer2 implements ObserverRole { @Override public void doOperate(String dogName) { System.out.println("观察者2-打狗"+dogName); } } /** * 具体观察者角色3 * @author abing * */ class Observer3 implements ObserverRole { @Override public void doOperate(String dogName) { System.out.println("观察者3-很打狗"+dogName); } } /** * 抽象目标角色 * @author abing * */ interface TargetRole { /** * 添加观察者 * @param observerRole */ void addObserver(ObserverRole observerRole); /** * 移除观察者 * @param observerRole */ void removeObserver(ObserverRole observerRole); /** * 通知所有观察者 * @param observerRole */ void notifyObserver(String dogName); } /** * 具体目标角色 * @author abing * */ class DogTarget implements TargetRole { List<ObserverRole> observerRoles = new ArrayList<ObserverRole>(); @Override public void addObserver(ObserverRole observerRole) { observerRoles.add(observerRole); } @Override public void notifyObserver(String dogName) { for (ObserverRole observer : observerRoles) { observer.doOperate(dogName);// 观察者做出操作 } } @Override public void removeObserver(ObserverRole observerRole) { observerRoles.remove(observerRole); } /** * 狗进门了 */ public void comeIn(String dogName) { notifyObserver(dogName);//通知所有的观察者 } } /** * 观察者模式测试类 * @author abing * */ public class ObserverTest { public static void main(String[] args) { ObserverRole observerRole1=new Observer1(); ObserverRole observerRole2=new Observer2(); ObserverRole observerRole3=new Observer3(); DogTarget dogTarget=new DogTarget();//实例一个被观察者 dogTarget.addObserver(observerRole1);//给被观察者添加观察者1,完成关门动作 dogTarget.addObserver(observerRole2);//给被观察者添加观察者2,完成打狗动作 dogTarget.addObserver(observerRole3);//给被观察者添加观察者3,完成打狗动作 dogTarget.comeIn("笨笨"); //被观察者进入,它的观察者采取行动 } }
运行代码,输出如下:
观察者1-关住笨笨
观察者2-打狗笨笨
观察者3-很打狗笨笨
说明观察者已经采取了行动...
发表评论
-
降低代码复杂度的一些点
2014-05-23 17:59 2334合理使用以下方案,可降低系统的代码复杂度,遵循程序设计的开闭原 ... -
23设计模式-享元模式
2012-11-13 18:55 0作用:共享对象,节省内存 package com; ... -
22设计模式-访问者模式
2012-10-31 17:06 022设计模式-访问者模式 22设计模式-访问者模式 -
21设计模式-中介者模式
2012-10-31 09:42 823中介者模式 中介模式封装一系列的对象交互,集中管理相关对象之间 ... -
20设计模式-迭代器模式
2012-10-28 11:21 0迭代器模式: 提供一种方法顺序一个聚合对象中各个元素,而又不暴 ... -
19设计模式-解释器模式
2012-10-28 11:19 0解释器模式 某一特定领域的问题比较复杂,类似的模式不断重复出现 ... -
18设计模式-桥接模式
2012-10-28 11:19 0桥接模式 将抽象部分与实现部分分离,使它们都可以独立的变化。 ... -
17设计模式-状态模式
2012-10-25 19:05 0状态模式 当一个对象的内在状态改变时允许改变其行为,这个对 ... -
16设计模式-备忘录模式
2012-10-24 10:41 0备忘录模式: 在不破坏封闭的前提下,捕获一个对象的内部状态,并 ... -
15设计模式-命令模式
2012-10-24 10:41 0命令模式 将“请求”封装成对象,以便使用不同的请求、队 ... -
14设计模式-责任链模式
2012-10-31 09:46 765责任链模式: 责任链模式是一种对象的行为模式。在责任链模式里, ... -
13设计模式-组合模式
2012-10-21 14:02 0组合模式详细: 对象间常常通过树结构来组织(包含)起来,以实现 ... -
11.设计模式-外观模式
2012-10-21 13:43 0动机(Motivate): 在软件开发系统中,客户程序 ... -
12设计模式-装饰模式
2012-10-21 10:53 0可以动态的给对象添加 ... -
5设计模式-原型模式
2012-10-19 09:06 0定义:用原型实例指定 ... -
设计模式-自己的理解
2012-10-19 08:52 0参考文章: http://www.cnblogs.com/he ... -
3、4设计模式-生成器模式&单例模式
2012-10-18 20:41 03.生成器模式: 适用: 分步骤创建一个复杂的对象。 构建一 ... -
7.java模板模式与8.策略模式示例
2011-11-17 19:38 2865模板方法简介: 把一些 ... -
9.Java静动态代理模式示例
2011-11-16 10:59 9011.静态代理模式 使用场合: 为其他对象提供一种代理以控制对这 ... -
1.工厂方法与2.抽象工厂详解
2011-11-15 11:05 991下面是一个典型的工厂方法模式: package com; ...
相关推荐
TCP-IP详解卷1:协议.rarTCP-IP详解卷1:协议.rarTCP-IP详解卷1:协议.rarTCP-IP详解卷1:协议.rarTCP-IP详解卷1:协议.rarTCP-IP详解卷1:协议.rarTCP-IP详解卷1:协议.rarTCP-IP详解卷1:协议.rarTCP-IP详解卷1:...
56丨观察者模式(上):详解各种应用场景下观察者模式的不同实现方式1
源码1.批量合并PDF文档:Python脚本详解
8.深度解密八:网站SEO优化关于站外优化的那些关键点详解.docx8.深度解密八:网站SEO优化关于站外优化的那些关键点详解.docx8.深度解密八:网站SEO优化关于站外优化的那些关键点详解.docx8.深度解密八:网站SEO优化...
│ Python3爬虫课程资料代码 │ ├─章节1: 环境配置 │ 课时01:Python3+Pip环境配置.mp4 │ 课时02:MongoDB环境配置.mp4 │ 课时03:Redis环境配置.mp4 ... 课时34:Scrapy分布式的部署详解.mp4
8.深度解密八:网站SEO优化关于站外优化的那些关键点详解.pdf8.深度解密八:网站SEO优化关于站外优化的那些关键点详解.pdf8.深度解密八:网站SEO优化关于站外优化的那些关键点详解.pdf8.深度解密八:网站SEO优化关于...
TCPIP协议详解卷一:协议.pdfTCPIP协议详解卷一:协议.pdfTCPIP协议详解卷一:协议.pdfTCPIP协议详解卷一:协议.pdf
ServletJSP深入详解:基于Tomcat的Web开发第一章02.pdf
IBMStruts2培训PPT (大全集) 主讲:刘雷 完整实用 第一章:认识体验Struts2.ppt 第二章:struts2架构剖析.ppt 第三章:struts2配置详解.ppt 第四章:struts2中的OGNL.ppt ...Struts2开发详解.ppt
[完全手册:Excel.VBA办公应用开发详解] 代码 [完全手册:Excel.VBA办公应用开发详解] 代码
飞思科技 Tomcat与Java.Web开发技术详解:Tomcat与Java.Web开发技术详解.pdf
TCP IP Illustrated, Vol 1 The Protocols. 计算机网络详解:协议,很清晰哦
C语言函数库详解.doc C语言函数库,包含 C 标准库、IO 函数、字符处理函数、字符串函数、数学函数、时间和日期函数、其它函数等数百个常用的C语言函数,文档中对常用函数库的函数原型、详细功能、使用示例等进行了...
第6讲-Scala编程详解:函数入门之默认参数和带名参数 共5页 第7讲-Scala编程详解:函数入门之变长参数 共4页 第8讲-Scala编程详解:函数入门之过程、lazy值和异常 共5页 第9讲-Scala编程详解:数组操作之Array、...
第6讲-Scala编程详解:函数入门之默认参数和带名参数 共5页 第7讲-Scala编程详解:函数入门之变长参数 共4页 第8讲-Scala编程详解:函数入门之过程、lazy值和异常 共5页 第9讲-Scala编程详解:数组操作之Array、...
第6讲-Scala编程详解:函数入门之默认参数和带名参数 共5页 第7讲-Scala编程详解:函数入门之变长参数 共4页 第8讲-Scala编程详解:函数入门之过程、lazy值和异常 共5页 第9讲-Scala编程详解:数组操作之Array、...
第6讲-Scala编程详解:函数入门之默认参数和带名参数 共5页 第7讲-Scala编程详解:函数入门之变长参数 共4页 第8讲-Scala编程详解:函数入门之过程、lazy值和异常 共5页 第9讲-Scala编程详解:数组操作之Array、...
第6讲-Scala编程详解:函数入门之默认参数和带名参数 共5页 第7讲-Scala编程详解:函数入门之变长参数 共4页 第8讲-Scala编程详解:函数入门之过程、lazy值和异常 共5页 第9讲-Scala编程详解:数组操作之Array、...
第6讲-Scala编程详解:函数入门之默认参数和带名参数 共5页 第7讲-Scala编程详解:函数入门之变长参数 共4页 第8讲-Scala编程详解:函数入门之过程、lazy值和异常 共5页 第9讲-Scala编程详解:数组操作之Array、...