设计模式 | 观察者模式/发布-订阅模式(observer/publish-subscribe)
定义:
定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态发生变化时,会通知所有观察者对象,使他们能够自动更新自己。
结构:(书中图,侵删)
实例:
package designpattern.observer;public interface Fans {public void react(String result); }
package designpattern.observer;public class HomeFans implements Fans {@Overridepublic void react(String result) {System.out.print("主场球迷:");if (result.equals("win")) {System.out.println("Yes! 我们赢啦,主场就是牛批!!!");} else {System.out.println("输了,哎...");}}}
package designpattern.observer;public class AwayFans implements Fans {@Overridepublic void react(String result) {System.out.print("客场球迷:");if (result.equals("win")) {System.out.println("输了,哎...");} else {System.out.println("Yes! 客场都赢啦,牛批!!!");}}}
package designpattern.observer;import java.util.ArrayList; import java.util.List;public interface Match {List<Fans> fansList = new ArrayList<>();// 这一句void addFans(Fans fans);void removeFans(Fans fans);void notifyResult(String result);}
package designpattern.observer;import java.util.ArrayList; import java.util.List;public class MatchOnTheSpot implements Match {// List<Fans> fansList = new ArrayList<>(); @Overridepublic void addFans(Fans fans) {fansList.add(fans);}@Overridepublic void removeFans(Fans fans) {fansList.remove(fans);}@Overridepublic void notifyResult(String result) {for (Fans fans : fansList) {fans.react(result);}} }
package designpattern.observer;import java.util.ArrayList; import java.util.List;public class MatchOnTheTV implements Match {// List<Fans> fansList = new ArrayList<>(); @Overridepublic void addFans(Fans fans) {fansList.add(fans);}@Overridepublic void removeFans(Fans fans) {fansList.remove(fans);}@Overridepublic void notifyResult(String result) {for (Fans fans : fansList) {fans.react(result);}} }
package designpattern.observer;public class Client {public static void main(String[] args) {HomeFans homeFans = new HomeFans();AwayFans awayFans = new AwayFans();// 现场看Match match = new MatchOnTheSpot();match.addFans(homeFans);match.addFans(awayFans);System.out.println("主场赢啦~");match.notifyResult("win");System.out.println("===========================");// 电视上看match = new MatchOnTheTV();System.out.println("主场输啦~");match.notifyResult("lose");} }
主场赢啦~ 主场球迷:Yes! 我们赢啦,主场就是牛批!!! 客场球迷:输了,哎... =========================== 主场输啦~ 主场球迷:输了,哎... 客场球迷:Yes! 客场都赢啦,牛批!!!
总结:
转载于:https://www.cnblogs.com/imoqian/p/10771406.html
设计模式 | 观察者模式/发布-订阅模式(observer/publish-subscribe)相关推荐
- 设计模式-观察者模式 发布/订阅模式
设计模式-观察者模式 发布/订阅模式 代码 观察者接口 public interface IHanFeiZi{// 当吃早饭时public void havBreakFast();// 进行娱乐活动时 ...
- RabbitMQ发布/订阅模式(Publish/Subscribe)
工作队列模式是直接在生产者与消费者里声明好一个队列,这种情况下消息只会对应同类型的消费者. 举个用户注册的列子:用户在注册完后一般都会发送消息通知用户注册成功(失败).如果在一个系统中,用户注册信息有 ...
- python 设计模式 观察者模式(发布订阅模式)
发布订阅模式 观察者模式应用比较广泛,又被称为"发布-订阅"模式.它用来定义对象间一种一对多的依赖关系,当一个对象的状态发生变化时,所有依赖它的对象都得到通知并被自动更新. 问题1 ...
- RabbitMQ指南之三:发布/订阅模式(Publish/Subscribe)
在上一章中,我们创建了一个工作队列,工作队列模式的设想是每一条消息只会被转发给一个消费者.本章将会讲解完全不一样的场景: 我们会把一个消息转发给多个消费者,这种模式称之为发布-订阅模式. 为了阐述这个 ...
- 每日学习一个设计模式--观察者模式(发布-订阅模式)
定义 观察者(Observer)模式的定义:指多个对象间存在一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新.这种模式有时又称作发布-订阅模式.模型-视图模式,它 ...
- JavaScript设计模式之发布-订阅模式(观察者模式)-Part1
<JavaScript设计模式与开发实践>读书笔记. 发布-订阅模式又叫观察者模式,它定义了对象之间的一种一对多的依赖关系.当一个对象的状态发生改变时,所有依赖它的对象都将得到通知. 例如 ...
- 【RabbitMQ】基础三:发布与订阅模式(Publish/Subscribe)
[RabbitMQ]基础三:发布与订阅模式(Publish/Subscribe) 1. 订阅模式 2. 发布与订阅模式说明 3. 代码示例 3.1 生产者 3.2 消费者 3.3 测试 4. 总结 1 ...
- 游戏服务器架构-设计模式之发布订阅模式
发布订阅模式场景 熟悉消息中间件的同学应该对发布/订阅模式(Publish Subscribe Pattern)并不陌生.即使你不了解消息中间件,那么在平时生活中发布/订阅模式也是非常常见的场景. 比 ...
- 从东京奥运会看js设计模式之发布订阅模式
开篇废话:本篇文章介绍发布-订阅模式,想必很多人听说过有一种观察者模式,网上既有资料说这是两种不同的设计模式,也有说这是一种模式,我倾向于认同他们是同一种设计模式.不必过于纠结 开篇楔子:东京奥运会已 ...
最新文章
- 使用nexus来搭建Nuget私服
- c# 自定义文件关联程序
- android authtype=1,【报Bug】plus.screen.lockOrientation在android里引起闪退
- C++ Testing Framework
- 1087 All Roads Lead to Rome (30 分)【难度: 一般 / Dijkstra】
- 大数据领域33个预测,开启未知的2016
- php文件锁解锁是删除对应的文件_软件 | 文件解锁强制删除工具 Wise Force Deleter v1.49...
- java数组与C++数组间的区别
- 24张最新可视化大屏模板,各行业数据直接套用
- 局部替换算法最小生成树
- 今日恐慌与贪婪指数为28,等级由极度恐慌转为恐慌
- Pandas详解十之Dropna滤除缺失数据
- XXE漏洞详解与利用
- 怎样制作网关服务器,如何设计自己的网关(一)
- 金融借贷平台大数据风控解决方案
- 【面试题集 —— No.01】常见图片格式BMP、JPG/JPEG、PNG、GIF、TIFF、SVG的区别
- 展望:可见光通信技术标准体系建设
- 《锋利的jQuery》读书要点笔记7——制作商城网页:网站脚本
- 【Arduino基础】一位数码管实验
- NAS与NAS数据同步
热门文章
- HTTP与HTTPS(自制漫画图解)
- Java基础知识之什么是集合框架
- 2019湖南省职业院校技能竞赛集训开班典礼
- Photon PUN和Photon Server连接问题及解决方法(Unity开发)
- Unknown version string [4.0]. Default version will be used.
- 微信小程序开发笔记 基础篇②——微信小程序 手动查看和代码查看开发者ID(AppID)
- 分享一个Python 在线编辑器
- XML/XSD/XSLT
- DDoS 攻击继续激增
- 【Linux】日志 日志管理服务 日志轮替