JAVA_观察者模式例子
观察者模式
定义:在对象之间定义了一对多的依赖,这样一来,当一个对象改变状态,依赖它的对象会收到通知并自动更新。
以下是一个简单的例子:
一、定义一个被观察者接口
/*** 定义个抽象被观察者接口* 声明了添加、删除、通知观察者方法* */
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_观察者模式例子相关推荐
- android观察者模式例子,Android-Kotlin实现观察者模式的小案例
在日常的Android开发当中,我们肯定会遇到要使用观察者模式的场景.下面分享一下利用如何用Kotlin实现Android的交互代码. 源码 1.创建两个接口 /** * 类说明:观察者接口 * * ...
- 数据结构猴子选大王java_数据结构例子-猴子选大王
约瑟夫问题(猴子选大王): n只猴子要选大王,选举办法如下:所有猴子按1,2,-,n编号围坐一圈,从第一号开始按1,2,-,m报数,凡报m号的推出圈外,如此循环报数,直到圈内剩下一只猴子时,这只猴 ...
- 观察者模式 - dom事件 / 自定义事件 / Promise 我的理解
观察者模式(Observer) 又称作为发布-订阅模式或消息机制,定义了一种依赖关系,解决了主体对象与观察者对象之间通讯和耦合的问题; 观察者模式例子 引用于<JavaScript设计模式> ...
- java设计模式-观察者模式(广播机制,消息订阅)
什么叫观察者模式: 观察者模式是广播机制,消息订阅和推送的核心设计. 开发中常见的场景: 1.手机中消息推送 2.后台群发信息 观察者模式例子(自己实现) 首先是定义观察者接口并使用三个子类实现 /* ...
- 设计模式(行为型)之观察者模式(Observer Pattern)
PS一句:最终还是选择CSDN来整理发表这几年的知识点,该文章平行迁移到CSDN.因为CSDN也支持MarkDown语法了,牛逼啊! [工匠若水 http://blog.csdn.net/yanbob ...
- Unity3D设计模式学习之观察者模式(二)
上一篇简单的写了观察者模式例子和实现思路,对观察者模式只是有了大致的了解,设计模式一般都比较抽象,实际运用需要根据需求来设计.重构,这篇就看看书上的例子,加深理解. 实现说明 游戏事件系统的实现 // ...
- 【Java设计模式】观察者模式
文章目录 观察者模式角色 观察者类图 观察者模式例子 观察者模式的优点 观察者模式的适用情景 ***观察者模式:***定义对象间的一种一对多的依赖关系,当一个对象的状态发生变化时,所有依赖于它的对象都 ...
- c++ ftp服务端_重磅干货||五万字长文总结:C/C++ 知识(下篇)
结识更多同行,共同讨论"嵌入式"技术.欢迎添加社区客服微信,备注发送"电源+公司名(学校)+职位(专业)"拉您入群. 回顾上篇:五万字长文总结:C/C++ 知识 ...
- JavaScript设计模式浅析
JavaScript设计模式浅析 JavaScript设计模式浅析 一.工厂模式 1.简单的工程模式 2.工程模式实例 二.建造者模式 1.建造者模式例子 三.单体模式 1.普通创建对象方式 2.单体 ...
- 熬夜整理,五万字长文总结 C/C++ 知识点
这是一篇五万字的C/C++知识点总结,长文预警.能滑到留言区的,都是麒麟臂! 学C/C++的同学,收藏起来哦~ C/C++ 知识总结 目录 C/C++ STL 数据结构 算法 Problems 操作系 ...
最新文章
- 浅析Python中bytes和str区别
- activity 启动模式_腾讯大牛:你根本不懂Activity!
- Racktables(一)的资产管理软件安装配置
- python socket 网络编程
- 计算机课实验三,成都信息工程学院计算机网络课程实验三
- [工具] PicGo + smms 构建图床
- 中国百家姓氏图腾大全
- Spring框架从入门到精通
- 异星工场服务器直连,Factorio 异星工厂 搭建服务器
- Study「Word2016」:论文公式编辑时,编号右对齐
- t’触发器真值表和状态方程_T触发器的特性表.ppt
- 第三届上海大学生网络安全
- 计算机网络实验三 rdt协议
- 树莓派基于QT实现利用USB转485模块进行串口通讯
- php公众号获取code,微信公众号获取code
- SD卡SPI模式入门教程
- 用计算机玩王者荣耀,王者荣耀你们用电脑玩王者荣耀顺手吗? - 游戏发言 - 酷酷跑手机游戏...
- 河北省谷歌地球高程DEM等高线下载
- matlab画转体_如何用MATLAB画五角星围绕其一对称轴旋转的旋转体?
- C++把一个字符转换成string方法