1. package Observer;
  2.  
  3. public class Test {
  4.  
  5. /**
  6. * client测试类别
  7. * 观察者模式一般由四部分组成:
  8. * 1摘要观察员(教科书被称为一般“Subject(抽象类的主题)”),
  9. * 里面一般定义了抽象的add(),remove(),notifyAll()等方法,
  10. * 分别用于添加观察者,删除观察者,通知观察者自己的变化。
  11. * 2详细的被观察者类(一般教材上都叫做“ConcreteSubject(详细的主题类)”),
  12. * 是抽象的被观察者(Subject)的详细的实现类,里面实现了add(),remove(),notifyAll()等方法;
  13. * 3抽象的观察者类(一般教材上叫做“Observer”),里面一般定义了一个抽象的update()方法。
  14. * 4详细的观察者类(一般教材上叫做“ConcreteObserver”),他是抽象的观察者类(Observer)的详细实现,它实现了update()方法,
  15. * 用于接受被观察者的详细变化;
  16. *
  17. * 这里有个样例:有两个被观察者陈美嘉和胡一菲,他们分别有不同的观察者。陈美嘉的观察者有吕小布,
  18. * 胡一菲的观察者有曾贤儿和张伟两个,当陈美嘉和胡一菲有什么变化时,立即就会分别被他们的观察者说知道;
  19. * @author wl
  20. */
  21. public static void main(String[] args) {
  22. Watched HuYiFei=new ConcerteWatched();
  23. Watched ChenMeiJia=new ConcerteWatched();
  24.  
  25. Watcher LvXiaoBu=new ConcreteWatcher("吕小布","陈美嘉");
  26. Watcher ZengXianEr=new ConcreteWatcher("曾贤儿","胡一菲");
  27. Watcher ZhangWei=new ConcreteWatcher("张伟","女神");
  28.  
  29. ChenMeiJia.addWatcher(LvXiaoBu);
  30. HuYiFei.addWatcher(ZengXianEr);
  31. HuYiFei.addWatcher(ZhangWei);
  32.  
  33. HuYiFei.notifyWatchers("好想看电影啊!
  34.  
  35. 。!
  36.  
  37. ");
  38.  
  39. ChenMeiJia.notifyWatchers("好想去旅游啊!!!");
  40.  
  41. }
  42.  
  43. }
  1.  
  1. package Observer;
  2. /**
  3. * 抽象的观察者接口类
  4. * @author wl
  5. *
  6. */
  7. public interface Watcher {
  8. void updata(String str);
  9. }
  1. package Observer;
  2. /**
  3. * 抽象的被观察者接口
  4. * @author wl
  5. *
  6. */
  7. public interface Watched {
  8. void addWatcher(Watcher watcher);
  9. void removeWatcher(Watcher watcher);
  10. void notifyWatchers(String str);
  11. }
  1. package Observer;
  2. /**
  3. * 详细的观察者类,比方样例中的吕小布。曾贤儿,张伟就是观察者的实例
  4. * @author wl
  5. *
  6. */
  7. public class ConcreteWatcher implements Watcher {
  8. String watcheredName;
  9. String name;
  10.  
  11. public ConcreteWatcher(String name,String watcheredName){
  12. this.name=name;
  13. this.watcheredName=watcheredName;
  14. }
  15. @Override
  16. public void updata(String str) {
  17. System.out.println(name+"心里暗暗高兴“嘿嘿!!。机会来了,我的"+watcheredName+"说她 ‘"+str+"’”");
  18. }
  19.  
  20. }
  1. package Observer;
  2.  
  3. import java.util.ArrayList;
  4. import java.util.List;
  5. /**
  6. * 详细的被观察者类,比方样例中的胡一菲,陈美嘉就是详细的被观察者的实例
  7. * @author wl
  8. *
  9. */
  10. public class ConcerteWatched implements Watched {
  11. List<Watcher> list=new ArrayList<Watcher>();
  12.  
  13. @Override
  14. public void addWatcher(Watcher watcher) {
  15. list.add(watcher);
  16. }
  17.  
  18. @Override
  19. public void removeWatcher(Watcher watcher) {
  20. list.remove(watcher);
  21. }
  22.  
  23. @Override
  24. public void notifyWatchers(String str) {
  25. for(Watcher watcher:list){
  26. watcher.updata(str);
  27. }
  28. }
  29.  
  30. }

输出为:

曾贤儿心里暗暗高兴“嘿嘿!!

机会来了,我的胡一菲说她 ‘好想看电影啊!

!!’”

张伟心里暗暗高兴“嘿嘿!

!!

机会来了,我的女神说她 ‘好想看电影啊!!。’”

吕小布心里暗暗高兴“嘿嘿!

。一个偶然的机会,我的陈女士说,她 ‘好想去旅游啊!!!’”

版权声明:本文博客原创文章,博客,未经同意,不得转载。

java设计模式:观察者模式的更多相关文章

  1. java设计模式--观察者模式(Observer)

    java设计模式--观察者模式(Observer) java设计模式--观察者模式(Observer) 观察者模式的定义: 定义对象间的一种一对多的依赖关系.当一个对象的状态发生改变时,所有依赖于它的 ...

  2. 【设计模式】Java设计模式 - 观察者模式

    [设计模式]Java设计模式 - 观察者模式 不断学习才是王道 继续踏上学习之路,学之分享笔记 总有一天我也能像各位大佬一样 @一个有梦有戏的人 @怒放吧德德 分享学习心得,欢迎指正,大家一起学习成长 ...

  3. JAVA 设计模式 观察者模式

    用途 观察者模式 (Observer) 观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象. 这个主题对象在状态发生变化时,会通知所有观察者对象,使它们能够自动更新自己. 观 ...

  4. Java设计模式--观察者模式到监听器

    观察者模式是对象的行为模式.又叫做发布-订阅模式.模型-视图模式.源-监听器模式. 抽象主题角色:主题角色将所有对观察者对象的引用到保存在一个集合里,每个主题都可以拥有任意数量的观察者.抽象主题提供一 ...

  5. Java设计模式の观察者模式(推拉模型)

    目录: 一.观察者定义 二.观察者模式的结构(推模式实现) 三.推模型和拉模型(拉模式实现) 四.JAVA提供的对观察者模式的支持 五.使用JAVA对观察者模式的支持(自带推模式实现实例) 一.观察者 ...

  6. Java设计模式 - 观察者模式

    定义 观察者模式属于对象行为型模式. 在对象之间定义一对多的依赖,这样一来当一个对象改变状态,依赖它的对象都会收到通知并自动更新. 优点 1.  主题和观察者之间抽象耦合.无论什么对象主要实现了特定的 ...

  7. 我的Java设计模式-观察者模式

    相信大家都有看过<喜洋洋与灰太狼>,说的是灰太狼和羊族的"斗争",而每次的结果都是灰太狼一飞冲天,伴随着一句"我还会回来的......".为灰太狼感 ...

  8. java设计模式-观察者模式学习

    最近学习了设计模式中的观察者模式,在这里记录下学习成果. 观察者模式,个人理解:就是一个一对多模型,一个主体做了事情,其余多个主体都可以观察到.只不过这个主体可以决定谁去观察他,以及做什么事情可以给别 ...

  9. Java设计模式——观察者模式(事件监听)

    最近在看Tomcat和Spring的源码,在启动的时候注册了各种Listener,事件触发的时候就执行,这里就用到了设计模式中的观察者模式. 引-GUI中的事件监听 想想以前在学Java的GUI编程的 ...

  10. JAVA设计模式—观察者模式和Reactor反应堆模式

    被观察者(主题)接口 定义主题对象接口 /**抽象主题角色: 这个主题对象在状态上发生变化时,会通知所有观察者对象 也叫事件对象 */ public interface Subject { //增加一 ...

随机推荐

  1. java线程学生进实训室

    Instructor: Dr. Simina FlutureCSCI 34 CSCI 34 CSCI 34CSCI 34 0 Summer 201 ummer 201 ummer 201ummer 2 ...

  2. Three.js 3D打印数据模型文件(.STL)载入中

    3DPrint是现在和未来10年度科技产品的主流之中.广泛的. 对于电子商务类3D打印网站.一个主要功能就是商品3D呈现的方式,那是,3D数据可视化技术. HTML5(WebGL)它可以用于构建3D查 ...

  3. iOS 在TabViewController中的一个ViewController跳转到另一种ViewController

    第一步: #import "AppDelegate.h" 步骤二: 在须要跳转的地方: AppDelegate *appDelegate = (AppDelegate *)[[UI ...

  4. 使用cm-12.0源代码编译twrp

    Select the newest branch available. This step is not necessary with Omni because Omni already includ ...

  5. [视频解说]0基础课程-运营商-Java它J2se

    本节解说 运营商应用 Java 算被分成: 算术运算符 颂值运营商 逻辑运算符 位运算符 元运算符 这里录制了 视频解说这几大类运算符,并有练习题提供大家 面试题: 1. 最有效率的方式算出2乘以8等 ...

  6. FTP文件操作之删除文件

    上面我已经介绍了利用ftp进行上传跟下载,接下来跟大家分享的是删除ftp服务器上的文件的部分.有了上传,有了下载,那么删除自然也是不能少的. 删除相对于上传跟下载更简单一些,它不需要进行文件的传输,只 ...

  7. 升级iOS8系统后,保险箱Pro、私人保险箱、私密相冊打开就闪退的官方解决方式

    升级iOS8系统后,保险箱Pro.私人保险箱.私密相冊打开就闪退的官方解决方式   写在前面的话: 1.   本文适用条件    适用于:您的保险箱Pro.私人保险箱.私密相冊在iPhone或iPad ...

  8. linux基础知识1

    1. 硬盘分区 分区类型:主分区,扩展分区.逻辑分区: 分区规则: 一个硬盘仅仅能有1到4个主分区: 一个硬盘仅仅能有1个扩展分区: 一个硬盘的主分区和扩展分区最多仅仅能有4个. 扩展分区仅仅能用来包 ...

  9. hdu4190 简单的二分法

    题意是 有n个城市,m个投票箱.接下来n个城市人口数,每一个投票箱都不能为空.计算最后投票箱的容量必须达到多少,才干满足须要. 每一个城市的人必须仅仅能将票投到自己城市分得得投票箱中.要是容量最小箱子 ...

  10. 【C语言探索之旅】 第二部分第四课:字符串

    内容简介 1.课程大纲 2.第二部分第四课: 字符串 3.第二部分第五课预告: 预处理 课程大纲 我们的课程分为四大部分,每一个部分结束后都会有练习题,并会公布答案.还会带大家用C语言编写三个游戏. ...