- 浏览: 422453 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (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 895AbstractMediator.java代码如下: pa ... -
设计模式----原型模式(prototype pattern)
2013-07-21 22:51 602AdvTemplate.java代码如下: package ... -
设计模式----状态模式(state pattern)
2013-07-21 22:48 1157LiftState.java代码如下: package ... -
设计模式----访问者模式(visitor pattern)
2013-07-21 22:44 937IVisitor.java代码如下: package co ... -
设计模式----组合模式(composite)
2013-07-20 16:13 896该设计模式是以公司的组织结构为背景的 Crop.java代码 ... -
设计模式----迭代器模式(Iterator)
2013-07-20 15:59 882IProject.java代码如下: package co ... -
设计模式----装饰者模式(decorator pattern)
2013-07-15 09:08 986SchoolReport.java代码如下: packag ... -
设计模式----命令模式(command pattern)
2013-07-15 09:09 924Group.java代码如下: pa ... -
设计模式----桥梁模式(bridge pattern)
2013-07-14 22:21 1143Product.java代码如下: package com ... -
设计模式----模板方法模式(template method pattern)
2013-07-14 17:00 1118HummerModel.java代码如下: packag ... -
设计模式----适配器模式(adapter)
2013-07-14 13:37 832IUserInfo.java代码如下: package c ... -
设计模式----门面模式(facade)
2013-07-14 13:30 913LetterProcess.java代码如下 ... -
设计模式----抽象工厂模式(abstract factory pattern)
2013-07-13 23:09 883Human.java代码如下: package com. ... -
设计模式----工厂方法模式(factory method pattern)
2013-07-10 22:19 1041给定一个工厂类,用这个工厂类造出一堆对象来,这些对象对应的类实 ... -
设计模式----多例模式(Multition)
2013-07-02 22:47 1004Emperor.java 代码如下: ... -
设计模式----单例模式(singleton)
2013-06-30 22:17 732单例就是唯一的意思。 第一种单例实现方式(在多线程环境中存在 ... -
设计模式----代理模式(proxy)
2013-06-30 22:02 925代理模式主要使用了java ... -
设计模式----策略模式(strategy)
2013-06-29 22:17 1037本文参考别人设计模式的一个例子。 关于诸葛亮的三个锦囊妙计的 ... -
装饰着模式(decorator)
2012-09-09 21:51 979一下代码就是运用了装饰者模式: package com.ba ... -
观察者模式(observer)
2012-09-09 19:36 907设计模式中观察者模式的实现有很多方式,这里列出两种实现方式 1 ...
相关推荐
用c++和lua实现的观察者模式小栗子,其中c++版本参考了别人的实现
结合微信公众号讲解观察者模式,生动形象,关键是上手快啊
观察者模式 概述 定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。 适用性 1.当一个抽象模型有两个方面,其中一个方面依赖于另一方面。 将这二者封装...
c++设计模式-行为型模式-观察者模式;qt工程;c++简单源码; 观察者(Observer)模式的定义:指多个对象间存在一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。这种模式...
设计模式C++学习之观察者模式(Observer)
C#面向对象设计模式纵横谈(19):(行为型模式) Observer 观察者模式 (Level 300)
观察者模式(Observer) 用意:定义了一种一对多的依赖关系,让多个观察者对象同时监听某一主题对象。
观察者模式通常的叫法叫做订阅-发布模式,类似于报刊杂志的订阅,观察者和被观察者就是读者和邮局的关系,读者先要在邮局订阅想要的报刊,当报刊发行时,邮局会将报刊邮寄到读者家里。观察者(Observer)和被观察者...
NULL 博文链接:https://lgd-java2eye.iteye.com/blog/760350
我们说学习Java应该从Swing开始,那么学习Swing最重要的思想就是对于观察者模式的理解(Observer Pattern)。因为,该设计模式在Java Swing框架中贯穿了始终。对于C#的委托、代理概念所使用的Callback(回调模式--...
C#面向对象设计模式 (行为型模式) Observer 观察者模式 视频讲座下载
定义对象间的一种一对多的依赖关系,以便当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并自动刷新。
设计模式内部培训资料-详细介绍了观察者模式。
Observer (观察者模式) 又叫做发布/订阅(Publish/Subscribe)模式。 当一个对象的改变同时会影响其他对象的行为的时候,可以使用此设计模式。 l 主题对象 :一个需要被关注的主题对象,这个主题对象改变会影响...
5.7 OBSERVER(观察者)—对象行为型模式 194 5.8 STATE(状态)—对象行为型模式 201 5.9 STRATEGY(策略)—对象行为型模式 208 5.10 TEMPLATE METHOD(模板方法)—类行为型模式 214 5.11 VISITOR(访问者)—...
在 C#中的委托和事件 一文的后半部分,我向大家讲述了Observer(观察者)模式,并使用委托和事件实现了这个模式。实际上,不使用委托和事件,一样可以实现Observer模式。在本文中,我将使用GOF的经典方式,再次实现一...
观察者模式(Observer Pattern)是一种对象行为型设计模式,它定义了对象之间的一对多依赖关系。 当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。这种模式通常用于实现分布式事件处理系统...
- 观察者模式(Observer) - 模板方法模式(Template Method) - 策略模式(Strategy) - 责任链模式(Chain of Responsibility) - 中介者模式(Mediator) - 访问者模式(Visitor) - 命令模式(Command) - 解释器模式...
5.7 OBSERVER(观察者)——对象行为型模式 5.8 STATE(状态)——对象行为型模式 5.9 STRATEGY(策略)——对象行为型模式 5.10 TEMPLATE METHOD(模板方法)——类行为型模式 5.11 VISITOR(访问者)——对象行为...