- 浏览: 428919 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (170)
- java (77)
- javascript (5)
- jsp (1)
- servlet (6)
- struts (8)
- hibernate (3)
- spring (4)
- ajax (5)
- jquery (3)
- apache cxf (0)
- ext.js (1)
- hadoop (0)
- android (0)
- html5 (2)
- linux (5)
- flex (1)
- tomcat (1)
- jboss (0)
- nginx (0)
- mysql (16)
- sql server (3)
- oracle (4)
- div+css (0)
- mybatis (4)
- design patterns (22)
- xml (2)
- postgresql (3)
- velocity (1)
- freemarker (1)
- kendo-ui (2)
- ibatis (1)
- socket (1)
- C and C++ (1)
- C# (2)
- 程序设计----算法 (0)
- jersey (1)
- dd (0)
- perl (1)
- shell (0)
最新评论
-
书策稠浊:
兄弟,这tm是Java?
java调用百度地图和谷歌地图 -
fengyunlouyanyu:
jquery----删除指定id的div下的img -
yangjianzhouctgu:
Neoman 写道hi,我看你引入了kendo.web.min ...
kendo-ui中kendoGrid的用法 -
Neoman:
hi,我看你引入了kendo.web.min.js 这个js, ...
kendo-ui中kendoGrid的用法 -
yangjianzhouctgu:
llscp 写道这是JS吧...对的呀
java调用百度地图和谷歌地图
这里采用两种方式实现观察者模式:第一种方式为完全自己写,第二种方式为实现JDK 的Observable和Observer接口
第一种方式:
Observer.java代码如下:
package com.designPattern.abserver; public interface Observer { public void update(String context); }
LiSi.java代码如下:
package com.designPattern.abserver; public class LiSi implements Observer{ @Override public void update(String context) { System.out.println("李斯:观察到韩非子的活动了,开始向老板汇报!"); this.report(context); System.out.println("李斯:汇报完毕!"); } private void report(String reportContext){ System.out.println("李斯:报告秦始皇,李斯有活动:"+reportContext); } }
LiuSi.java代码如下:
package com.designPattern.abserver; public class LiuSi implements Observer{ @Override public void update(String context) { System.out.println("刘斯:观察到韩非子活动!"); this.happy(context); System.out.println("刘斯:真被乐死了!"); } private void happy(String context){ System.out.println("刘斯:因为"+context+",--所以我很快乐!"); } }
WangSi.java代码如下:
package com.designPattern.abserver; public class WangSi implements Observer{ @Override public void update(String context) { System.out.println("王斯:观察到韩非子活动!"); this.cry(context); System.out.println("王斯:真真的哭死了!"); } private void cry(String context){ System.out.println("王斯:因为"+context+"---所以悲伤!"); } }
Observable.java代码如下:
package com.designPattern.abserver; /** * * @author yangjianzhou * 所有被观察者 */ public interface Observable { public void addObserver(Observer observer); public void deleteObserver(Observer observer); public void notifyObservers(String context); }
HanFeiZi.java代码如下:
package com.designPattern.abserver; import java.util.ArrayList; public class HanFeiZi implements Observable{ private ArrayList<Observer> observerList = new ArrayList<Observer>(); @Override public void addObserver(Observer observer) { this.observerList.add(observer); } @Override public void deleteObserver(Observer observer) { this.observerList.remove(observer); } @Override public void notifyObservers(String context) { for(Observer observer:observerList){ observer.update(context); } } public void haveBreakfast(){ System.out.println("韩非子:开始吃饭了。。。"); this.notifyObservers("韩非子正在吃饭"); } public void haveFun(){ System.out.println("韩非子正在娱乐!"); this.notifyObservers("韩非子正在娱乐"); } }
Client.java代码如下:
package com.designPattern.abserver; public class Client { public static void main(String[] args) { Observer liSi = new LiSi(); Observer wangSi = new WangSi(); Observer liuSi = new LiuSi(); HanFeiZi hanFeiZi = new HanFeiZi(); hanFeiZi.addObserver(liSi); hanFeiZi.addObserver(wangSi); hanFeiZi.addObserver(liuSi); hanFeiZi.haveBreakfast(); } }
运行结果如下:
韩非子:开始吃饭了。。。 李斯:观察到韩非子的活动了,开始向老板汇报! 李斯:报告秦始皇,李斯有活动:韩非子正在吃饭 李斯:汇报完毕! 王斯:观察到韩非子活动! 王斯:因为韩非子正在吃饭---所以悲伤! 王斯:真真的哭死了! 刘斯:观察到韩非子活动! 刘斯:因为韩非子正在吃饭,--所以我很快乐! 刘斯:真被乐死了!
第二种方式:
LiSi.java 代码如下:
package com.designPattern.abserverAPI; import java.util.Observable; import java.util.Observer; public class LiSi implements Observer{ @Override public void update(Observable observable, Object obj) { System.out.println("李斯:观察到韩非子的活动了,开始向老板汇报!"); this.report(obj.toString()); System.out.println("李斯:汇报完毕!"); } private void report(String reportContext){ System.out.println("李斯:报告秦始皇,李斯有活动:"+reportContext); } }
LiuSi.java代码如下:
package com.designPattern.abserverAPI; import java.util.Observable; import java.util.Observer; public class LiuSi implements Observer{ @Override public void update(Observable observable, Object obj) { System.out.println("刘斯:观察到韩非子活动!"); this.happy(obj.toString()); System.out.println("刘斯:真被乐死了!"); } private void happy(String context){ System.out.println("刘斯:因为"+context+",--所以我很快乐!"); } }
WangSi.java代码如下:
package com.designPattern.abserverAPI; import java.util.Observable; import java.util.Observer; public class WangSi implements Observer{ @Override public void update(Observable observable, Object obj) { System.out.println("王斯:观察到韩非子活动!"); this.cry(obj.toString()); System.out.println("王斯:真真的哭死了!"); } private void cry(String context){ System.out.println("王斯:因为"+context+"---所以悲伤!"); } }
HanFeiZi.java代码如下:
package com.designPattern.abserverAPI; import java.util.Observable; /** * * @author yangjianzhou * 使用JDK自带的Observable类 */ public class HanFeiZi extends Observable{ public void haveBreakfast(){ System.out.println("韩非子:开始吃饭了。。。"); super.setChanged(); super.notifyObservers("韩非子正在吃饭"); } public void haveFun(){ System.out.println("韩非子正在娱乐!"); super.setChanged(); super.notifyObservers("韩非子正在娱乐"); } }
Client.java代码如下:
package com.designPattern.abserverAPI; import com.designPattern.abserver.HanFeiZi; import com.designPattern.abserver.LiSi; import com.designPattern.abserver.LiuSi; import com.designPattern.abserver.Observer; import com.designPattern.abserver.WangSi; public class Client { public static void main(String[] args) { Observer liSi = new LiSi(); Observer wangSi = new WangSi(); Observer liuSi = new LiuSi(); HanFeiZi hanFeiZi = new HanFeiZi(); hanFeiZi.addObserver(liSi); hanFeiZi.addObserver(wangSi); hanFeiZi.addObserver(liuSi); hanFeiZi.haveBreakfast(); } }
运行结果如下:
韩非子:开始吃饭了。。。 李斯:观察到韩非子的活动了,开始向老板汇报! 李斯:报告秦始皇,李斯有活动:韩非子正在吃饭 李斯:汇报完毕! 王斯:观察到韩非子活动! 王斯:因为韩非子正在吃饭---所以悲伤! 王斯:真真的哭死了! 刘斯:观察到韩非子活动! 刘斯:因为韩非子正在吃饭,--所以我很快乐! 刘斯:真被乐死了!
发表评论
-
设计模式----中介者模式(demiator pattern)
2013-07-21 22:55 934AbstractMediator.java代码如下: pa ... -
设计模式----原型模式(prototype pattern)
2013-07-21 22:51 640AdvTemplate.java代码如下: package ... -
设计模式----状态模式(state pattern)
2013-07-21 22:48 1206LiftState.java代码如下: package ... -
设计模式----访问者模式(visitor pattern)
2013-07-21 22:44 977IVisitor.java代码如下: package co ... -
设计模式----组合模式(composite)
2013-07-20 16:13 932该设计模式是以公司的组织结构为背景的 Crop.java代码 ... -
设计模式----迭代器模式(Iterator)
2013-07-20 15:59 920IProject.java代码如下: package co ... -
设计模式----装饰者模式(decorator pattern)
2013-07-15 09:08 1028SchoolReport.java代码如下: packag ... -
设计模式----命令模式(command pattern)
2013-07-15 09:09 959Group.java代码如下: pa ... -
设计模式----桥梁模式(bridge pattern)
2013-07-14 22:21 1187Product.java代码如下: package com ... -
设计模式----模板方法模式(template method pattern)
2013-07-14 17:00 1149HummerModel.java代码如下: packag ... -
设计模式----适配器模式(adapter)
2013-07-14 13:37 866IUserInfo.java代码如下: package c ... -
设计模式----门面模式(facade)
2013-07-14 13:30 949LetterProcess.java代码如下 ... -
设计模式----抽象工厂模式(abstract factory pattern)
2013-07-13 23:09 915Human.java代码如下: package com. ... -
设计模式----工厂方法模式(factory method pattern)
2013-07-10 22:19 1083给定一个工厂类,用这个工厂类造出一堆对象来,这些对象对应的类实 ... -
设计模式----多例模式(Multition)
2013-07-02 22:47 1036Emperor.java 代码如下: ... -
设计模式----单例模式(singleton)
2013-06-30 22:17 758单例就是唯一的意思。 第一种单例实现方式(在多线程环境中存在 ... -
设计模式----代理模式(proxy)
2013-06-30 22:02 963代理模式主要使用了java ... -
设计模式----策略模式(strategy)
2013-06-29 22:17 1092本文参考别人设计模式的一个例子。 关于诸葛亮的三个锦囊妙计的 ... -
装饰着模式(decorator)
2012-09-09 21:51 1010一下代码就是运用了装饰者模式: package com.ba ... -
观察者模式(observer)
2012-09-09 19:36 945设计模式中观察者模式的实现有很多方式,这里列出两种实现方式 1 ...
相关推荐
观察者模式(Observer Pattern)是软件设计模式中的行为模式之一,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。这种模式常用于实现事件驱动或发布-...
观察者模式(Observer Pattern)是软件设计模式中的一种行为模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。这种模式常用于事件驱动的系统或者...
结合微信公众号讲解观察者模式,生动形象,关键是上手快啊
观察者模式(Observer Pattern)是软件设计模式中的一种行为模式,它在C++中的应用广泛且实用。这种模式的核心思想是“主体”(Subject)与“观察者”(Observer)之间的松耦合关系,允许一个对象(即主体)的状态...
观察者模式(Observer Pattern)是行为设计模式的一种,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。 观察者模式的核心思想是发布-订阅模型,其中...
行为型模式如观察者模式(Observer)、策略模式(Strategy)和访问者模式(Visitor),关注对象之间的交互和责任分配。 在C++中,设计模式的应用通常涉及到面向对象编程的特性,如继承、封装和多态。Qt4框架则为...
观察者模式 概述 定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。 适用性 1.当一个抽象模型有两个方面,其中一个方面依赖于另一方面。 将这二者封装...
观察者模式(Observer Pattern)是软件设计模式中的一种行为模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。这种模式常用于实现事件驱动编程或者...
观察者模式(Observer)是软件设计模式中的一种行为模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并被自动更新。这种模式在C++中广泛应用,特别是在需要...
总结来说,观察者模式是一种重要的设计模式,它允许对象在状态改变时自动通知其他对象,从而降低了系统各部分之间的耦合度,提高了代码的灵活性和可扩展性。在实际项目中,正确使用观察者模式可以有效地管理组件间的...
c++设计模式-行为型模式-观察者模式;qt工程;c++简单源码; 观察者(Observer)模式的定义:指多个对象间存在一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。这种模式...
观察者模式,也称为发布-订阅模式或事件驱动模式,是一种行为设计模式,它定义了对象间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。 在C#、ASP.NET等.NET框架中,...
观察者模式(Observer Pattern)是软件设计模式中的一种行为模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。这种模式常用于事件驱动的系统或者...
在给定的“设计模式--观察者 c++版本”中,我们主要关注的是观察者模式(Observer Pattern)在C++语言中的实现。观察者模式是一种行为设计模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,...
观察者模式,也被称为发布-订阅模式或事件驱动模式,是软件设计模式中的一种行为模式。这个模式的主要目的是在对象之间建立一种松散耦合的关系,使得当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并...
观察者模式是一种行为设计模式,它允许你定义一个订阅机制,可以及时地在对象之间传播状态变化。在Java中,观察者模式常用于构建事件驱动系统,使得多个对象能够监听并响应某个对象的状态改变。 首先,我们要理解...
Java设计模式中的观察者模式(Observer Pattern)是一种对象行为型模式,它定义了一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并被自动更新。这种模式常用于事件处理和实时...
Observer设计模式,也被称为“发布-订阅”(Publish-Subscribe)模式或“依赖倒置”模式,是软件设计中的一种行为模式。它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到...
观察者模式(Observer)是软件设计模式中的一种行为模式,其主要目的是在对象之间建立一种松散耦合的关系,使得当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。这种模式广泛应用于事件驱动...