设计模式之——Observer模式
Observer模式又叫做观察者模式,当观察对象状态发生变化的时候,就会通知给观察者。这种模式适用于根据对象状态进行响应的场景!
实例程序是一个输出数字的程序。
- 观察者Observer类用于每500ms监测着数字是否发生变化
package site.wangxin520.gof.observer.damo; /**
* 监听器模式
* @author wangXgnaw
*
*/
public class Observer { private Event event;
private boolean canRun = true; /**
* 传入需要监听的对象
* @param event
*/
public Observer(Event event) {
this.event = event;
} /**
* 开始监听,监听者event事件中的数字的变化
*/
public void startObserver() {
System.out.println("监听器启动");
int srcNum = event.getNum();
while (canRun) {
int num = event.getNum();
//这里设置了线程的睡眠方法,相当于每秒只扫描两次
try {
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("监听器正在扫描!!");
//当数字改变时候,就输出
if (num != srcNum) {
System.out.println("检测到数字改变为:" + num);
srcNum=num;
} }
}
}
- Event抽象事件类,用于规范方法,方便后期的改变
package site.wangxin520.gof.observer.damo; /**
* 监听器监听对事件的抽象类
* @author wangXgnaw
*
*/
public abstract class Event { /**
* 设置抽象方法,返回数字
* @return int 返回数字
*/
public abstract int getNum(); }
- NumEvent数字事件类,是Event抽象类的实现
package site.wangxin520.gof.observer.damo; /**
* 抽象类的实现
* @author wangXgnaw
*
*/
public class NumEvent extends Event{ private static int num=0;
private int outNum=0; /**
* 这里设置的是,只要调用了这个方法,num就会加一
*/
@Override
public int getNum() {
num++; //相当于每调用三次改变数字
if(num%3==0){
outNum=num;
}
return outNum;
} }
- Test,观察者模式的测试类
package site.wangxin520.gof.observer.damo; /**
* 观察者模式的测试类
* @author wangXgnaw
*
*/
public class Test { public static void main(String[] args) { Event event=new NumEvent();
Observer ob=new Observer(event);
//开启观察者模式
ob.startObserver(); } }
- 结果:

观察者模式多用于消息队列的发布与订阅。以后会经常用到,需多加注意!
设计模式之——Observer模式的更多相关文章
- 3)Javascript设计模式:Observer模式
Observer模式 var Observer = (function() { var instance = null; function Observe() { this.events = {} } ...
- 面向对象设计模式——观察者(OBSERVER)模式
定义 定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新. Observer模式描述了如何建立这种关系.这一模式中的关键对象是目标(subject ...
- 设计模式:observer模式
目标:定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新 例子: class Observer //观察者 { public: virtual vo ...
- 设计模式---组件协作模式之观察者模式(Observer)
一:概念 Observer模式的作用是当一个对象的状态发生变化时,能够自动通知其他关联对象,自动刷新对象状态 Observer模式提供给关联对象一种同步通信的手段,使得某个对象与依赖他的其他对象之间保 ...
- Java设计模式(20)观察者模式(Observer模式)
Java深入到一定程度,就不可避免的碰到设计模式(design pattern)这一概念,了解设计模式,将使自己对java中的接口或抽象类应用有更深的理解.设计模式在java的中型系统中应用广泛,遵循 ...
- Observer模式(观察者设计模式)
Observer 设计模式? 在Observer模式中,当观察对象的状态发生变化时,会通知给观察者.Observer模式适用于根据对象状态进行相应处理的场景. Observer 并非主动观察,而是被动 ...
- 设计模式(十七)Observer模式
在Observer模式中,当观察对象的状态发生变化时,会通知给观察者.Observer模式适用于根据对象状态进行相应处理的场景. 首先看一下示例程序的视图. 然后用实际代码来理解这种设计模式. pac ...
- 设计模式C++描述----04.观察者(Observer)模式
一. 概述 Observer 模式要解决的问题为:建立一个一(Subject)对多(Observer)的依赖关系,并且做到当“一”变化的时候,依赖这个“一”的多也能够同步改变. Sbuject 相当于 ...
- 《图解设计模式》读书笔记8-1 Observer模式
目录 示例程序 程序类图 程序 角色和类图 角色 类图 思路拓展 可复用性 Observer的顺序 MVC模式 Observer模式 Observer模式即观察者模式,该模式中,被观察者的状态发生变化 ...
随机推荐
- PHP截断函数mb_substr()
提示:mb_substr在于php中是默认不被支持的我们需要在在windows目录下找到php.ini打开编辑,搜索mbstring.dll,找到;extension=php_mbstring.dll ...
- WiFi(网络)调试Android手机
手机需要root 使用adb tcpip命令开启网络调试功能,一旦手机重启,又要重复这些步骤,比较麻烦. 一劳永逸的方法是,使用re管理器(给予root权限)在手机的/system/build.pro ...
- SQL Server 删除数据库所有表和所有存储过程
场景: SQL Server中,需要删除所有表或所有存储过程时,手动的方式只能逐个进行删除,耗个人时间,所以想弄个语句来实现这样的需求. 如果由于外键约束删除table失败,则先删除所有约束: - ...
- hadoop基础学习---基本概念
1.组成部分HDFS和MapReduce 2.HDFS这几架构
- 查询_修改SQL Server 2005中数据库文件存放路径
1.查看当前的存放路径: select database_id,name,physical_name AS CurrentLocation,state_desc,size from sys.maste ...
- 用 webpack 构建 node 后端代码,使其支持 js 新特性并实现热重载
https://zhuanlan.zhihu.com/p/20782320?utm_source=tuicool&utm_medium=referral
- Spring Framework 官方文档学习(四)之Validation、Data Binding、Type Conversion(二)
接前一篇 Spring Framework 官方文档学习(四)之Validation.Data Binding.Type Conversion(一) 本篇主要内容:Spring Type Conver ...
- GLSL/C++ 实现滤镜效果
入门效果之浮雕 "浮雕"图象效果是指图像的前景前向凸出背景.常见于一些纪念碑的雕刻上.要实现浮雕事实上很easy.我们把图象的一个象素和左上方的象素进行求差运算.并加上一个灰度.这 ...
- Python 使用正则表达式匹配URL网址
使用正则表达式匹配以 .com 或 .cn 为域名后缀的URL地址 In [1]: import re In [2]: str = "http://www.baidu.com/" ...
- 浅谈Nutch插件机制(含开发实例)
plugin(插件)为nutch提供了一些功能强大的部件,举个例子,HtmlParser就是使用比较普遍的用来分析nutch抓取的html文件的插件. 为什么nutch要使用这样的plugin系统? ...