观察者模式,笔者以前做校验订单时用过一次,只是不知道有这个模式,当时使用观察者省略了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 之 观察者模式(大话设计模式)相关推荐

  1. java 装饰模式(大话设计模式)

    装饰模式:动态地给一个对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类更为灵活. 装饰模式把每个要装饰的功能放在单独的类中,并让这个类包装它所要装饰的对象,因此,当需要执行特殊行为时,客户代 ...

  2. 【大话设计模式】设计模式系统学习大合集

    转载请注明出处:http://blog.csdn.net/column/details/designpatternbylmb.html 为了方便各位网友学习以及方便自己复习之用,将设计模式的系列内容按 ...

  3. 大话设计模式—观察者模式

    当对象间存在一对多关系时,则使用观察者模式(Observer Pattern).比如,当一个对象被修改时,则会自动通知它的依赖对象.观察者模式属于行为型模式.主要解决一个对象状态改变给其他对象通知的问 ...

  4. java思想 设计模式 《大话设计模式》知识总结

    本文大部分内容来自<大话设计模式>. java很适合多人协作,但代码量很大. 与其抱怨需求总是变化,不如改变开发过程,从而更有效地应对变化.面向对象就是为了解决变化的问题. 文章目录 1. ...

  5. 大话设计模式、UML、设计模式Java版完全总结

    此篇博客为阅读大话设计模式后的笔记记录( 读完本文>≈读完<大话设计模式> ),注意是笔记形式,优先适合于对设计模式有一定了解的读者,希望短时间快速温习的读者,同时也对所有设计模式添 ...

  6. 大话设计模式Python实现-观察者模式

    观察者模式(发布-订阅模式 Publish Subscribe Pattern):定义了一种一对多的关系,让多个观察对象同时监听一个主题对象,当主题对象状态发生变化时会通知所有观察者,是它们能够自动更 ...

  7. [大话设计模式C++版] 第14章 老板回来,我不知道 —— 观察者模式

    源码可以在这里找到 大话设计模式C++版 双向耦合的代码 //Secretary.h 秘书类 #include <QList>using namespace std; class Stoc ...

  8. 《大话设计模式(C#实现)》(Yanlz+VR云游戏+Unity+SteamVR+云技术+5G+AI+设计模式+GoF+UML+单例模式+观察者模式+抽象工厂+代理模式+框架编程+立钻哥哥++OK+)

    <大话设计模式(C#实现)> 版本 作者 参与者 完成日期 备注 YanlzFramework_GoF_V01_1.0 严立钻 2020.02.10 ##<大话设计模式(C#实现)& ...

  9. 大话设计模式java解读

    大话设计模式 各个模式包括:需求 + 各个实现版本 简单工厂 策略模式 装饰者模式 代理模式 工厂模式 原型模式 模板设计模式 各个模式包括:需求 + 各个实现版本 简单工厂 实现两数的加减乘除 无脑 ...

最新文章

  1. c语言exit在哪个头文件_C语言函数执行成功时,返回1和返回0,究竟哪个好?
  2. java uml 为什么_Java开发为什么需要UML
  3. STM32定时器的TRGO信号
  4. centos7 yum源_搭建内网Linux CentOS yum源,摆脱依赖包困扰
  5. 《笑傲网湖》第五回 状态检测防火墙
  6. MySQL优化之查询缓存(mysql8官方已经废弃这个功能)
  7. boost::stl_interfaces模块实现节点迭代器的测试程序
  8. linux 基础命令总结
  9. 从编译安装Keepalived 到 配置 负载均衡(LVS-DR)
  10. commons-lang3工具类学习(二)
  11. python概率密度函数参数估计_EM算法求高斯混合模型参数估计——Python实现
  12. 手机浏览器网址_打开URL(在其他应用中访问网址)app下载-打开URL(在其他应用中访问网址)v2.6安卓版下载...
  13. java怎么检测代码安全_foritfy代码安全审计、foritfy代码检测服务、java代码安全审计检测、C/C++语言代码安全审计检测...
  14. 机器学习:分类算法SVM(支持向量机)
  15. R语言的特征选择(Feature Selection)包:Boruta和caret
  16. python3 数据结构_python系列十一:python3数据结构
  17. java 分词搜索_基于JAVA的小型中文分词系统
  18. oracle report builder 6i下载,Report Builder 3.0
  19. 辛普森法 matlab,MATLAB辛普森法则
  20. List把特定元素排在第一位

热门文章

  1. 13 MySQL--存储过程
  2. python 的基础 学习 第四天 基础数据类型
  3. Paxos—以选美比赛为例PPT
  4. 最新出炉程序猿使用说明书
  5. 数据传递型情景下事件机制与消息机制的架构设计剖析(目录)
  6. pytorch之---max()函数
  7. 数字化方法基础(二)_点的投影
  8. ipa 上传卡在鉴权_Application Loader上传app,一直卡在“正在通过 App Store 进行鉴定”...
  9. bat 等待输入_深蓝词库转换 - 简单的输入法词库转换工具
  10. 小学二年级上学期计算机教案,小学二年级上学期信息技术教案范文【三篇】