java 之 观察者模式(大话设计模式)
观察者模式,笔者以前做校验订单时用过一次,只是不知道有这个模式,当时使用观察者省略了N多if else
在笔者看来观察者模式比较试用于一个对象状态改变后,很多个对象也要根据这个状态做相应的动作,当然观察者模式只是给大家开了一扇门,更希望的是灵活运用,而不是拘泥于细节,
我们可以从中汲取到把实现相同接口的类来放到集合里,然后便利集合调取公共方法去完成相应的工作,先看下类图
大话设计模式-类图
基于类图笔者写了如下的简单的实例。
/*** 通知者抽象接口*/ public interface INotify {public void notifySub();public void addSub(ISubject subject);public void removeSub(ISubject subject); }
/*** 观察者抽象接口*/ public interface ISubject {public void updateState(String state); }
/*** 具体通知者*/ public class Notify implements INotify {private List<ISubject> subjects = new ArrayList<>();@Overridepublic void addSub(ISubject subject) {subjects.add(subject);}@Overridepublic void removeSub(ISubject subject) {subjects.remove(subject);}@Overridepublic void notifySub() {for (ISubject subject : subjects) {subject.updateState("下订单了");}} }
/*** 具体观察者*/ public class Subject implements ISubject {@Overridepublic void updateState(String state) {System.out.println(state);} }
/*** 客户端*/ public class Test {public static void main(String[] args) {INotify notify = new Notify();notify.addSub(new Subject());notify.notifySub();} }
运行结果:
下订单了
设计模式,能够优化我们的代码,解耦,易扩展,易维护,不过如果不能够理解设计模式的精髓所在,生搬硬套可能收不到理想的效果。
笔者认为,吸取设计模式的思想才是学习的关键。以上是笔者对观察者的理解,希望能帮助学习的小伙伴!
转载于:https://www.cnblogs.com/zhuxiansheng/p/7988020.html
java 之 观察者模式(大话设计模式)相关推荐
- java 装饰模式(大话设计模式)
装饰模式:动态地给一个对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类更为灵活. 装饰模式把每个要装饰的功能放在单独的类中,并让这个类包装它所要装饰的对象,因此,当需要执行特殊行为时,客户代 ...
- 【大话设计模式】设计模式系统学习大合集
转载请注明出处:http://blog.csdn.net/column/details/designpatternbylmb.html 为了方便各位网友学习以及方便自己复习之用,将设计模式的系列内容按 ...
- 大话设计模式—观察者模式
当对象间存在一对多关系时,则使用观察者模式(Observer Pattern).比如,当一个对象被修改时,则会自动通知它的依赖对象.观察者模式属于行为型模式.主要解决一个对象状态改变给其他对象通知的问 ...
- java思想 设计模式 《大话设计模式》知识总结
本文大部分内容来自<大话设计模式>. java很适合多人协作,但代码量很大. 与其抱怨需求总是变化,不如改变开发过程,从而更有效地应对变化.面向对象就是为了解决变化的问题. 文章目录 1. ...
- 大话设计模式、UML、设计模式Java版完全总结
此篇博客为阅读大话设计模式后的笔记记录( 读完本文>≈读完<大话设计模式> ),注意是笔记形式,优先适合于对设计模式有一定了解的读者,希望短时间快速温习的读者,同时也对所有设计模式添 ...
- 大话设计模式Python实现-观察者模式
观察者模式(发布-订阅模式 Publish Subscribe Pattern):定义了一种一对多的关系,让多个观察对象同时监听一个主题对象,当主题对象状态发生变化时会通知所有观察者,是它们能够自动更 ...
- [大话设计模式C++版] 第14章 老板回来,我不知道 —— 观察者模式
源码可以在这里找到 大话设计模式C++版 双向耦合的代码 //Secretary.h 秘书类 #include <QList>using namespace std; class Stoc ...
- 《大话设计模式(C#实现)》(Yanlz+VR云游戏+Unity+SteamVR+云技术+5G+AI+设计模式+GoF+UML+单例模式+观察者模式+抽象工厂+代理模式+框架编程+立钻哥哥++OK+)
<大话设计模式(C#实现)> 版本 作者 参与者 完成日期 备注 YanlzFramework_GoF_V01_1.0 严立钻 2020.02.10 ##<大话设计模式(C#实现)& ...
- 大话设计模式java解读
大话设计模式 各个模式包括:需求 + 各个实现版本 简单工厂 策略模式 装饰者模式 代理模式 工厂模式 原型模式 模板设计模式 各个模式包括:需求 + 各个实现版本 简单工厂 实现两数的加减乘除 无脑 ...
最新文章
- c语言exit在哪个头文件_C语言函数执行成功时,返回1和返回0,究竟哪个好?
- java uml 为什么_Java开发为什么需要UML
- STM32定时器的TRGO信号
- centos7 yum源_搭建内网Linux CentOS yum源,摆脱依赖包困扰
- 《笑傲网湖》第五回 状态检测防火墙
- MySQL优化之查询缓存(mysql8官方已经废弃这个功能)
- boost::stl_interfaces模块实现节点迭代器的测试程序
- linux 基础命令总结
- 从编译安装Keepalived 到 配置 负载均衡(LVS-DR)
- commons-lang3工具类学习(二)
- python概率密度函数参数估计_EM算法求高斯混合模型参数估计——Python实现
- 手机浏览器网址_打开URL(在其他应用中访问网址)app下载-打开URL(在其他应用中访问网址)v2.6安卓版下载...
- java怎么检测代码安全_foritfy代码安全审计、foritfy代码检测服务、java代码安全审计检测、C/C++语言代码安全审计检测...
- 机器学习:分类算法SVM(支持向量机)
- R语言的特征选择(Feature Selection)包:Boruta和caret
- python3 数据结构_python系列十一:python3数据结构
- java 分词搜索_基于JAVA的小型中文分词系统
- oracle report builder 6i下载,Report Builder 3.0
- 辛普森法 matlab,MATLAB辛普森法则
- List把特定元素排在第一位
热门文章
- 13 MySQL--存储过程
- python 的基础 学习 第四天 基础数据类型
- Paxos—以选美比赛为例PPT
- 最新出炉程序猿使用说明书
- 数据传递型情景下事件机制与消息机制的架构设计剖析(目录)
- pytorch之---max()函数
- 数字化方法基础(二)_点的投影
- ipa 上传卡在鉴权_Application Loader上传app,一直卡在“正在通过 App Store 进行鉴定”...
- bat 等待输入_深蓝词库转换 - 简单的输入法词库转换工具
- 小学二年级上学期计算机教案,小学二年级上学期信息技术教案范文【三篇】