设计模式之——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模式即观察者模式,该模式中,被观察者的状态发生变化 ...
随机推荐
- (38)JS运动之淡入淡出
基本思路:使用样式filter.可是要区分IE浏览器和chrom.firefox的不同,详细也是用定时器来实现. <!DOCTYPE HTML> <!-- --> <ht ...
- 你是否有遇到过某个实体类字段(属性)过多的情况,不想每次点的话戳进来(C# 反射)
贴上一段代码: bureaucraticEntities apply = new bureaucraticEntities(); Type tapp= app.GetType(); Type ttmp ...
- 【Java面试题】57 short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错?
Java规范有这样的规则 [ 1.高位转低位需要强制转换 2.低位转高位自动转. ] short s1 = 1; s1 = s1 + 1;有什么错? 答: i 是int 型 s1 short型 通 ...
- 【Java面试题】31 介绍Collection框架的结构
Collection:List列表,Set集 Map:Hashtable,HashMap,TreeMap Collection 是单列集合 List 元素是有序的.可重复 有序的 colle ...
- php对gzip的使用(实例)
代码如下: if (!function_exists('gzdecode')) { function gzdecode ($data) { $flags = ord(substr($data, 3, ...
- 不错的源码演示:admin5源码
admin5源码官网:http://down.admin5.com/ 集资讯,源码,字体,itchat于一体的网站,可以下载喔! 实际项目中可以用得到.
- opengl 模板测试 glStencilOp glStencilFunc
下面来设置蒙板缓存和蒙板测试. 首先我们启用蒙板测试,这样就可以修改蒙板缓存中的值. 下面我们来解释蒙板测试函数的含义: 当你使用glEnable(GL_STENCIL_TEST)启用蒙板测试之后,蒙 ...
- Emojis support in Apple push notification
I am working on iPhone app named "INTERSTIZIO".In this I have implemented functionality li ...
- MathType编辑半直积符号的步骤
在数学中,特别是叫做群论的抽象代数领域中,半直积(semidirect product)是从其中一个是正规子群的两个子群形成一个群的特定方法.半直积是直积的推广.半直积是作为集合的笛卡尔积,但带有特定 ...
- 什么是集群(Cluster)技术
什么是集群(Cluster)技术Cluster集群技术可如下定义:一组相互独立的服务器在网络中表现为单一的系统,并以单一系统的模式加以管理.此单一系统为客户工作站提供高可*性的服务.大多数模式下,集群 ...