观察者模式

定义:在对象之间定义了一对多的依赖,这样一来,当一个对象改变状态依赖它的对象收到通知并自动更新

以下是一个简单的例子:

一、定义一个被观察者接口

/*** 定义个抽象被观察者接口* 声明了添加、删除、通知观察者方法* */
public interface Observerable {public void registerObserver(Observer o);public void removeObserver(Observer o);public void notifyObserver();
}

二、定义一个观察者接口

/*** 抽象观察者* 定义了一个update()方法,当被观察者调用notifyObservers()方法时,观察者的update()方法会被回调。* */
public interface Observer {public void update(String message);
}

三、实现被观察者接口类,同时有一个List集合,用以保存注册的观察者,

      等需要通知观察者时,遍历该集合即可。

/*** 被观察者,也就是微信公众号服务* 实现了Observerable接口,对Observerable接口的三个方法进行了具体实现* */
public class WechatServer implements Observerable{//注意到这个List集合的泛型参数为Observer接口,设计原则:面向接口编程而不是面向实现编程private List<Observer> list;private String message;   public WechatServer() {list = new ArrayList<Observer>();}@Overridepublic void registerObserver(Observer o) {// TODO Auto-generated method stublist.add(o);}@Overridepublic void removeObserver(Observer o) {// TODO Auto-generated method stubif(!list.isEmpty())list.remove(o);}@Overridepublic void notifyObserver() {// TODO Auto-generated method stubfor(int i = 0; i < list.size(); i++) {Observer oserver = list.get(i);oserver.update(message);}}public void setInfomation(String s) {this.message = s;System.out.println("微信服务更新消息: " + s);//消息更新,通知所有观察者notifyObserver();}
}

四、实现具体观察者接口

/*** 观察者* 实现了update方法* */
public class User implements Observer{private String name;private String message;public User(String name) {this.name = name;}@Overridepublic void update(String message) {// TODO Auto-generated method stubthis.message = message;read();}public void read() {System.out.println(name + " 收到推送消息: " + message);}
}

五、客户端测试

public static void main(String[] args) {WechatServer server = new WechatServer();          Observer userZhang = new User("ZhangSan");Observer userLi = new User("LiSi");Observer userWang = new User("WangWu");server.registerObserver(userZhang);server.registerObserver(userLi);server.registerObserver(userWang);server.setInfomation("PHP是世界上最好用的语言!");System.out.println("----------------------------------------------");server.removeObserver(userZhang);server.setInfomation("JAVA是世界上最好用的语言!");
}

效果:

JAVA_观察者模式例子相关推荐

  1. android观察者模式例子,Android-Kotlin实现观察者模式的小案例

    在日常的Android开发当中,我们肯定会遇到要使用观察者模式的场景.下面分享一下利用如何用Kotlin实现Android的交互代码. 源码 1.创建两个接口 /** * 类说明:观察者接口 * * ...

  2. 数据结构猴子选大王java_数据结构例子-猴子选大王

    约瑟夫问题(猴子选大王):   n只猴子要选大王,选举办法如下:所有猴子按1,2,-,n编号围坐一圈,从第一号开始按1,2,-,m报数,凡报m号的推出圈外,如此循环报数,直到圈内剩下一只猴子时,这只猴 ...

  3. 观察者模式 - dom事件 / 自定义事件 / Promise 我的理解

    观察者模式(Observer) 又称作为发布-订阅模式或消息机制,定义了一种依赖关系,解决了主体对象与观察者对象之间通讯和耦合的问题; 观察者模式例子 引用于<JavaScript设计模式> ...

  4. java设计模式-观察者模式(广播机制,消息订阅)

    什么叫观察者模式: 观察者模式是广播机制,消息订阅和推送的核心设计. 开发中常见的场景: 1.手机中消息推送 2.后台群发信息 观察者模式例子(自己实现) 首先是定义观察者接口并使用三个子类实现 /* ...

  5. 设计模式(行为型)之观察者模式(Observer Pattern)

    PS一句:最终还是选择CSDN来整理发表这几年的知识点,该文章平行迁移到CSDN.因为CSDN也支持MarkDown语法了,牛逼啊! [工匠若水 http://blog.csdn.net/yanbob ...

  6. Unity3D设计模式学习之观察者模式(二)

    上一篇简单的写了观察者模式例子和实现思路,对观察者模式只是有了大致的了解,设计模式一般都比较抽象,实际运用需要根据需求来设计.重构,这篇就看看书上的例子,加深理解. 实现说明 游戏事件系统的实现 // ...

  7. 【Java设计模式】观察者模式

    文章目录 观察者模式角色 观察者类图 观察者模式例子 观察者模式的优点 观察者模式的适用情景 ***观察者模式:***定义对象间的一种一对多的依赖关系,当一个对象的状态发生变化时,所有依赖于它的对象都 ...

  8. c++ ftp服务端_重磅干货||五万字长文总结:C/C++ 知识(下篇)

    结识更多同行,共同讨论"嵌入式"技术.欢迎添加社区客服微信,备注发送"电源+公司名(学校)+职位(专业)"拉您入群. 回顾上篇:五万字长文总结:C/C++ 知识 ...

  9. JavaScript设计模式浅析

    JavaScript设计模式浅析 JavaScript设计模式浅析 一.工厂模式 1.简单的工程模式 2.工程模式实例 二.建造者模式 1.建造者模式例子 三.单体模式 1.普通创建对象方式 2.单体 ...

  10. 熬夜整理,五万字长文总结 C/C++ 知识点

    这是一篇五万字的C/C++知识点总结,长文预警.能滑到留言区的,都是麒麟臂! 学C/C++的同学,收藏起来哦~ C/C++ 知识总结 目录 C/C++ STL 数据结构 算法 Problems 操作系 ...

最新文章

  1. 浅析Python中bytes和str区别
  2. activity 启动模式_腾讯大牛:你根本不懂Activity!
  3. Racktables(一)的资产管理软件安装配置
  4. python socket 网络编程
  5. 计算机课实验三,成都信息工程学院计算机网络课程实验三
  6. [工具] PicGo + smms 构建图床
  7. 中国百家姓氏图腾大全
  8. Spring框架从入门到精通
  9. 异星工场服务器直连,Factorio 异星工厂 搭建服务器
  10. Study「Word2016」:论文公式编辑时,编号右对齐
  11. t’触发器真值表和状态方程_T触发器的特性表.ppt
  12. 第三届上海大学生网络安全
  13. 计算机网络实验三 rdt协议
  14. 树莓派基于QT实现利用USB转485模块进行串口通讯
  15. php公众号获取code,微信公众号获取code
  16. SD卡SPI模式入门教程
  17. 用计算机玩王者荣耀,王者荣耀你们用电脑玩王者荣耀顺手吗? - 游戏发言 - 酷酷跑手机游戏...
  18. 河北省谷歌地球高程DEM等高线下载
  19. matlab画转体_如何用MATLAB画五角星围绕其一对称轴旋转的旋转体?
  20. C++把一个字符转换成string方法

热门文章

  1. 自然语言处理(NLP)常用算法入门笔记
  2. ableton 中文_Ableton live 中文 PDF.pdf
  3. 程序员使用C#编写表白小软件(VS2013)(表白程序)
  4. Ruff自主研发的NB-IoT智能网关获得联通实验室测试通过
  5. 【Linux的开胃小菜】基于Ubuntu搭建内网DNS服务器
  6. Python制图——图片格式代码探索
  7. RC积分器充放电过程
  8. 库卡机器人示教器截屏_库卡机器人示教器
  9. Java第四课:用类描述CPU速度和HardDisk容量
  10. 采集PLC数据转MQTT上报实现对PLC远程调试和远程程序上下载