- 浏览: 352562 次
- 性别:
- 来自: 杭州
文章分类
- 全部博客 (160)
- webservice (2)
- 数据库开发 (9)
- LINUX (6)
- 团队协作 (5)
- 前端技术 (4)
- J2EE (31)
- web服务器 (9)
- 经验常识 (12)
- 开发工具 (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 2382合理使用以下方案,可降低系统的代码复杂度,遵循程序设计的开闭原 ... -
23设计模式-享元模式
2012-11-13 18:55 0作用:共享对象,节省内存 package com; ... -
22设计模式-访问者模式
2012-10-31 17:06 022设计模式-访问者模式 22设计模式-访问者模式 -
21设计模式-中介者模式
2012-10-31 09:42 870中介者模式 中介模式封装一系列的对象交互,集中管理相关对象之间 ... -
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 786责任链模式: 责任链模式是一种对象的行为模式。在责任链模式里, ... -
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 2909模板方法简介: 把一些 ... -
9.Java静动态代理模式示例
2011-11-16 10:59 9501.静态代理模式 使用场合: 为其他对象提供一种代理以控制对这 ... -
1.工厂方法与2.抽象工厂详解
2011-11-15 11:05 1027下面是一个典型的工厂方法模式: package com; ...
相关推荐
**PhotoView库详解** 在移动应用开发中,尤其是在Android平台上,我们经常需要处理图片的显示,比如用户在浏览照片或者查看大图时的需求。PhotoView是Android平台上的一个开源库,它提供了一个可缩放的ImageView,...
观察者模式详解 观察者模式(Observer Design Pattern)是行为型设计模式的一种,主要解决的是“类或对象之间的交互”问题。它定义了一个一对多的依赖关系,当一个对象的状态改变时,所有依赖的对象都会自动收到...
Java 观察者模式详解 观察者模式(Observer Pattern)是一种行为设计模式,它定义了一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖它的对象都会得到通知并自动更新。该模式适用于需要在对象间建立...
观察者模式是软件设计模式中的一种行为模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并被自动更新。这个模式在很多场景下都有广泛的应用,例如事件处理、...
TCPIP协议详解卷一:协议.pdfTCPIP协议详解卷一:协议.pdfTCPIP协议详解卷一:协议.pdfTCPIP协议详解卷一:协议.pdf
9. 观察者模式:观察者模式定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。Java.util.Observable和Observer接口就是观察者模式的实现。 10. 装饰模式:...
观察者模式(Observer Pattern)是软件设计模式中的一种行为模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。这种模式常用于实现事件驱动编程或者...
5. 观察者模式:定义对象间的一对多依赖关系,当一个对象的状态改变时,所有依赖于它的对象都会得到通知并被自动更新。 6. 状态模式:允许对象在其内部状态改变时改变它的行为,对象看起来似乎修改了它的类。 7. ...
第1讲-Spark的前世今生 共12页第2讲-课程介绍、特色与价值 共13页第3讲-Scala编程详解:基础语法 共8页第4讲-Scala编程详解:条件控制与循环 共7页第5讲-Scala编程详解:函数入门 共5页第6讲-Scala编程详解:...
第1讲-Spark的前世今生 共12页第2讲-课程介绍、特色与价值 共13页第3讲-Scala编程详解:基础语法 共8页第4讲-Scala编程详解:条件控制与循环 共7页第5讲-Scala编程详解:函数入门 共5页第6讲-Scala编程详解:...
6. 观察者模式(Observer):当对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。 7. 状态模式(State):允许一个对象在其内部状态改变时改变它的行为。 8. 策略模式(Strategy):定义了一系列...
第1讲-Spark的前世今生 共12页第2讲-课程介绍、特色与价值 共13页第3讲-Scala编程详解:基础语法 共8页第4讲-Scala编程详解:条件控制与循环 共7页第5讲-Scala编程详解:函数入门 共5页第6讲-Scala编程详解:...
观察者模式详解 观察者模式是23种设计模式中的一种,尤其是在软件设计过程中体现的更是立足无穷。本文将详细讲解观察者模式的概念和实现,通过代码注释来解释各个组件的作用。 一、观察者模式的定义 观察者模式是...
第1讲-Spark的前世今生 共12页第2讲-课程介绍、特色与价值 共13页第3讲-Scala编程详解:基础语法 共8页第4讲-Scala编程详解:条件控制与循环 共7页第5讲-Scala编程详解:函数入门 共5页第6讲-Scala编程详解:...
嵌入式Linux设备驱动开发详解-光盘代码 书籍里面的光盘 实例代码: ----本书部分实例的源代码 工具: ----2410处理器的交叉编译工具 ----vivi ----busybox1.00 技术手册: ----本章实例中用到的器件手册 gcc...
结构模式:设计模式之Facade(外观),设计模式之Proxy(代理),设计模式之Adapter(适配器),设计模式之Composite(组合),设计模式之Decorator(油漆工),设计模式之Bridge,设计模式之Flyweight(享元). 行为模式:设计模式之...
### 观察者模式框架详解 #### 一、观察者模式概述 观察者模式(Observer Pattern)是一种行为设计模式,它定义了对象间的一种一对多依赖关系,以便当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并...
2. 生产者-消费者模式:通过阻塞队列实现生产者线程和消费者线程之间的数据交换,利用BlockingQueue接口实现线程间的同步。 3. 管道模式:使用PipedInputStream和PipedOutputStream实现线程间的通信,将数据从一个...
### 观察者模式详解及应用 #### 一、观察者模式概述 观察者模式是一种常用的软件设计模式,它定义了一种一对多的关系,让多个观察者对象同时监听某一个主题对象。当这个主题对象的状态发生变化时,会通知所有的...