设计模式目录
http://blog.csdn.net/fenglailea/article/details/52733435
风.fox

观察者模式

定义对象间一种一对多的依赖关系,使得每当一个对象改变状态,则所有依赖于它的对象都会得到通知并被自动更新

通用类图

组成

  • 被观察者 Subject
    定义被观察者必须实现的职责,它必须能够动态地增加、取消观察者。他一般是抽象类或者实现类,仅仅完成作为被观察者必须实现的职责:管理观察者并通知观察者
  • 观察者 Observer
    观察者接收到消息后,即进行update(更新方法)操作,对接收到的信息进行处理
  • 具体的被观察者 ConcreteSubject
    定义被观察者自己的业务逻辑,同时定义对哪些事件进行通知
  • 具体的观察者 ConcreteObserver
    每个观察者在接收到消息后的处理反应是不同,每个观察者有自己的处理逻辑

通用源码

JAVA

//被观察者
public abstract class Subject{//定义一个观察者组private Vector<Observer> obsVector =new Vector<Observer>();//增加一个观察者public void addObserver(Observer o){this.obsVector=o;}//删除一个观察者public void delObserver(Observer o){this.obsVector.remove(o);}//通知所有观察者public void notifyObservers(){for(Observer o:this.obsVector){o.uodate();}}
//具体的被观察者
public cass ConcreateSubject extends Subject{//具体业务public void doSomething(){//super.notifyObservers();}
}
//观察者
public interface Observer{//更新public void update();
}
//具体的观察者
public class ConcreteObserver implements Observer{//更新public void update(){System.out.println("我已经接收到消息啦,并且已经进行处理");}
}
//场景
public class Client{public static void main(Sting[] args){//创建一个被观察者ConcreteSubject subject = new ConcreteSubject();//定义一个观察者ConcreteObserver obs=new ConcreteObserver();//观察者被观察subject.addObserver(obs);//观察者开始活动了subject.doSomething();
}

优点

观察者和被观察者之间是抽象耦合
建立一套触发机制

使用场景

关联行为场景。需要注意的是,关联行为是可以拆分的,而不是“组合”关系
事件多级触发场景
跨系统的消息交换场景,如消息队列

适配器模式之观察者模式相关推荐

  1. c语言 适配器模式例子,NodeJS设计模式总结【单例模式,适配器模式,装饰模式,观察者模式】...

    NodeJS设计模式总结[单例模式,适配器模式,装饰模式,观察者模式] 发布时间:2020-08-21 03:08:03 来源:脚本之家 阅读:117 作者:lucky芬 本文实例讲述了NodeJS设 ...

  2. 我的WEB之路(一)-2.JAVA学习路线

    第一阶段:针对性夯实JAVA基础 课程名称 核心要点 完成目标 Java基础入门 搭建Java开发和运行环境等,IDE工具的学习和使用,Java语言基础,数据类型,运算符,条件和循环,数组使用等,Ja ...

  3. Asp.net(C#)面试100+题陆续添加中……

    我收集的面试题以及自己对一些面试题的理解: 1.C#不支持多重继承,可以通过接口实现. 2.public 全部公开     private 类内部     protected 自己和自己的子类     ...

  4. Java开发与技术挑战——关于技术的技术思考

     Java开发与技术挑战--关于技术的技术思考 width="22" height="16" src="http://hits.sinajs.cn ...

  5. 移动互联网高级开发学习笔记

    一.关于Android的前景 不断地也听见很多人在谈做Android是否还有前途.Android研发在走下坡路了.Android的工作太难找了,对于这些其实我的看法很简单,现在真的还没到说Androi ...

  6. 40个大数据学习资源,个个是干货,最后7个太给力

    "数据是驱动商业向前发展的核心,更是人类社会的未来." 尽管将马云的这句话断章取义地拿出来说会显得唐突,但这话所表达的意思却显而易见.今天给大家分享的这40个教程,送给对未来抱有远 ...

  7. Java学习教程整理

    Java 在编程语言排行榜中一直位列前排,可知 Java 语言的受欢迎程度了. 网上有很多 Java 教程,无论是基础入门还是开发小项目的教程都比比皆是,可是系统的很少,对于Java 学习者来说找到系 ...

  8. 2016/09/16面试资料汇总

    Rood 内连接 全连接 高并发 多线程 怎么识别不同用户的session spring和springMVC有什么区别 session和cookie的区别 ibatis的几个文件 springMVC有 ...

  9. 2017年高频率的互联网校园招聘面试题

    前言 参加了2017年校招,面试了阿里.百度.腾讯.滴滴.美团.网易.去哪儿等公司,个人是客户端 Android 方向,总结了面试过程中频率出现较高的题目,希望对大家有所帮助. Java 一些知识点 ...

  10. 2021年教你增加拿到BAT等大厂offer几率,分享PDF高清版

    1.项目介绍 Flutter是目前比较流行的跨平台开发技术,凭借其出色的性能获得很多前端技术爱好者的关注,比如阿里闲鱼,美团,腾讯等大公司都有投入相关案例生产使用. 基于Flutter+Dart+ch ...

最新文章

  1. OpenCV java 线性滤波(16)
  2. AI在这张“问卷”上首次超越人类,SuperGLUE被微软谷歌两家“攻破”
  3. Excel公式与函数案例速查手册/电脑技巧从入门到精通丛书
  4. asp.net基础中Get和Post的区别。
  5. 必读干货 | 如何做好向上管理,分享我实践多年的完整方法论
  6. html5用圆圈画猫,html5的应用-画一个可爱的小猫咪效果图
  7. Python中的多线程
  8. twitter数据分析_Twitter上最受欢迎的数据科学文章主题
  9. 服务器显卡驱动修复,AMD发布2020年首个显卡驱动:一口气修复27个Bug
  10. Linux 死机了怎么办
  11. Yii2如何使用存取控制过滤器(ACF)
  12. 实验报告:统计字符串中子字符串出现的次数
  13. 计算机组装配置兼容,电脑组装时怎么选择配置主板
  14. 视频水印去除工具哪个好
  15. 时间序列分析相关概念
  16. 做月饼-制作过程及图文笔记
  17. 永恒之蓝ms17_010漏洞
  18. 数据结构(C)必会知识点+易错点:数组和广义表(n维数组地址计算公式,特殊矩阵对称矩阵的存储,广义表的表示方法)
  19. 易点易动助力达达-京东到家打通全集团固定资产数字化管理全链条
  20. GD32F4xx 以太网芯片(enc28j60)驱动移植

热门文章

  1. 拓端tecdat|R语言模拟ARCH过程模型分析时间序列平稳性、波动性
  2. 拓端tecdat|约会数据动态可视化分析:R语言使用ggplot和ganimate制作的动画图
  3. 拓端tecdat|R语言基于线性回归的资本资产定价模型(CAPM)
  4. 2020【第十一届蓝桥杯省赛】 C/C++ B组 (第一场)
  5. c语言开发实际,21实际c语言教程-1 (转)
  6. PyTorch绘制训练过程的accuracy和loss曲线
  7. Python下安装LDA模块,学习使用
  8. Topic Model的分类总结(LDA变种)
  9. mysql like in 组合_mysql like in 组合 黄小柔junior分手原因
  10. 关键词词云怎么做_网友问:做独立站,怎么做关键词排名,怎么做客户流量?...