一、观察者模式定义

  • Observer模式是行为模式之一,它的作用是当一个对象的状态发生变化时,能够自动通知其他关联对象,自动刷新对象状态。
  • Observer模式提供给关联对象一种同步通信的手段,使某个对象与依赖它的其他对象之间保持状态同步。

二、观察者模式的结构

  • Subject(被观察者):被观察的对象。当需要被观察的状态发生变化时,需要通知队列中所有观察者对象。Subject需要维持(添加,删除,通知)一个观察者对象的队列列表。
  • ConcreteSubject:被观察者的具体实现。包含一些基本的属性状态及其他操作。
  • Observer(观察者):接口或抽象类。当Subject的状态发生变化时,Observer对象将通过一个callback函数得到通知。

  • ConcreteObserver: 观察者的具体实现。得到通知后将完成一些具体的业务逻辑处理。

三、观察者模式的特点

  • 侦听事件驱动程序设计中的外部事件
  • 侦听/监视某个对象的状态变化
  • 发布者/订阅者(publisher/subscriber)模型中,当一个外部事件(新的产品,消息的出现等等)被触发时,通知邮件列表中的订阅者

四、观察者模式的缺点

待整理

五、Demo

被观察者

/**
* @description:
* @auther: yangsj
* @created: 2019/3/21 17:25
*/
public class Blog extends Observable { public void publishArtical(){
Artical artical = new Artical();
artical.setTitle("title");
artical.setCoutent("countent");
this.setChanged();
this.notifyObservers(artical);
}
}

观察者

/**
* @description:
* @auther: yangsj
* @created: 2019/3/21 17:28
*/
public class User implements Observer {
@Override
public void update(Observable o, Object arg) {
Artical artical = (Artical)arg;
System.out.println("title"+artical.getTitle() + " countent" + artical.getCoutent());
}
}

消息基类

package com.nchu.observer;

/**
* @description:
* @auther: yangsj
* @created: 2019/3/21 17:24
*/
public class Artical {
public String title; public String coutent; public String getTitle() {
return title;
} public void setTitle(String title) {
this.title = title;
} public String getCoutent() {
return coutent;
} public void setCoutent(String coutent) {
this.coutent = coutent;
}
}

客户端调用

/**
* @description:
* @auther: yangsj
* @created: 2019/3/21 17:30
*/
public class APP {
@Test
public void Test(){
Blog blog = new Blog();
blog.addObserver(new User());
blog.publishArtical();
}
}

六、UML类图

Java设计模式(9)——观察者模式的更多相关文章

  1. 理解java设计模式之观察者模式

    在生活实际中,我们经常会遇到关注一个事物数据变化的情况,例如生活中的温度记录仪,当温度变化时,我们观察它温度变化的曲线,温度记录日志等.对于这一类问题,很接近java设计模式里面的“观察者模式”,它适 ...

  2. java设计模式之观察者模式以及在java中作用

    观察者模式是对象的行为模式,又叫发布-订阅(Publish/Subscribe)模式.模型-视图(Model/View)模式.源-监听器(Source/Listener)模式或从属者(Dependen ...

  3. java设计模式02观察者模式

    观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象.这个主题对象在状态上发生变化时,会通知所有观察者对象,使它们能够自动更新自己. 这里主要讲一下学习内置观察者的记录,在JA ...

  4. java设计模式之观察者模式

    观察者模式 观察者模式(有时又被称为发布(publish )-订阅(Subscribe)模式.模型-视图(View)模式.源-收听者(Listener)模式或从属者模式)是软件设计模式的一种.在此种模 ...

  5. JAVA设计模式 之 观察者模式

    简介: 观察者模式是JDK中最多的设计模式之一,非常有用,观察者模式介绍了一对多的依赖关系及松耦合,有了观察者,你将会消息灵通. 认识观察者模式,看一个报纸.杂志订阅是怎么回事: (1). 报社的业务 ...

  6. 折腾Java设计模式之观察者模式

    观察者模式 Define a one-to-many dependency between objects where a state change in one object results in ...

  7. JAVA设计模式之观察者模式 - Observer

    有趣的事情发生时,可千万别错过了!有一个模式可以帮你的对象知悉现况,不会错过该对象感兴趣的事.对象甚至在运行时可决定是否要继续被通知.有了观察者,你将会消息灵通. 介绍 观察者模式的定义: 在对象之间 ...

  8. JAVA设计模式 之 观察者模式(JDK内置实现)

    简介:使用JAVA内置的帮你搞定观察者模式. 1. 先把类图放在这里: (1). Observable类追踪所有的观察者,并通知他们. (2). Observer这个接口看起来很熟悉,它和我们之前写的 ...

  9. java设计模式之观察者模式(9)

    Java观察者模式的浅析 简单地说,观察者模式定义了一个一对多的依赖关系,让一个或多个观察者对象监察一个主题对象.这样一个主题对象在状态上的变化能够通知所有的依赖于此对象的那些观察者对象,使这些观察者 ...

  10. java设计模式:观察者模式

    package Observer; public class Test { /** * client测试类别 * 观察者模式一般由四部分组成: * 1摘要观察员(教科书被称为一般"Subje ...

随机推荐

  1. 《DSP using MATLAB》第2章习题Problem2.1

    1.代码: %% ------------------------------------------------------------------------ %% Output Info abo ...

  2. StreamSets 部署 Pipelines 到 SDC Edge

    可以使用如下方法: 下载edge 运行包并包含pipeline定义文件. 直接发布到edge 设备. 在data colelctor 机器配置并配置了edge server 地址(主要需要网络可访问) ...

  3. Oracle密码中含有特殊字符时exp,imp的使用

    今天通过exp迁移Oracle 数据,由于密码含有很有很多特殊字符,弄了好久,都没成功,后发在网上找到方法. 1 exp用法Linux 下(密码用一对双引号, 整体userid用对单引号括住)exp ...

  4. vs2013 乱码问题

    单击一下代码框  然后点文件  有个高级保存选项  改成utf-8  就可以显示中文了

  5. FreeFileSync 4.2 发布,文件夹比较和同步工具

    FreeFileSync 是一款开源的文件夹比较和同步工具,可用于 Win 和 Lin 平台,最近发布了 4.2 版本. FreeFileSync 采用双面板设计,使用方法很简单: 在左面版和右面版上 ...

  6. windows server 2008 HPC Edtion激活教程

    KMS激活指南 本服务器根据俄罗斯KMS服务器VMWARE架设,不受时间限制 KMS激活支持的Windows版本:Windows 2008, Windows 2008 R2 全系列产品Vista, W ...

  7. 【python】 Windows下pip安装包报错:Microsoft Visual C++ 9.0 is required Unable to find vcvarsall.bat

    刚在机器上windows环境下装上pip方便以后安装包的时候使用,谁知道第一次使用pip安装asyncio的时候就报错. 在Windows7x64下使用pip安装包的时候提示报错:Microsoft ...

  8. (转)SQL SERVER 日志已满的处理方法

    本文转载自:http://www.cnblogs.com/eycbest/archive/2012/01/04/2311567.html 事务日志文件Transaction Log File是用来记录 ...

  9. 视频描述(Video Captioning)调研

    Video Analysis 相关领域介绍之Video Captioning(视频to文字描述)http://blog.csdn.net/wzmsltw/article/details/7119238 ...

  10. 利用iWARP/RDMA解决以太网高延迟

    导读:“iWARP能够带来超低延迟.”据介绍,RDMA,即远程直接内存访问提供了应用程序到应用程序的直接通信能力,这也就意味着,应用将跳过操作系统,实现远程内存应用程序的访问 关键词: iWARP 低 ...