设计模式之——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模式即观察者模式,该模式中,被观察者的状态发生变化 ...
随机推荐
- 类加载器详解 (转至http://blog.csdn.net/jiangwei0910410003/article/details/17733153)
首先来了解一下字节码和class文件的区别: 我们知道,新建一个java对象的时候,JVM要将这个对象对应的字节码加载到内存中,这个字节码的原始信息存放在classpath(就是我们新建Java工程的 ...
- 【Java面试题】4 静态变量和实例变量的区别?详细解析
在语法定义上的区别:静态变量前要加static关键字,而实例变量前则不加.在程序运行时的区别:实例变量属于某个对象的属性,必须创建了实例对象,其中的实例变量才会被分配空间,才能使用这个实例变量.静态变 ...
- js中页面跳转(href)中文参数传输方式
编码: escape(参数); 解码: unescape(参数);
- Spring-MVC案例:Spitter的笔记
源码地址:https://github.com/Young4Dream/yan/tree/master/Maven_spittr 笔记: 1.当DispatcherServlet启动时,会创建Spri ...
- js定义对象
1.工厂模式 function createPerson(name,age,job){ var o = {}; o.name = name; o.age = age; o.job = job; o.s ...
- linux Redhat 6环境上通过源码包安装DRBD 8
环境描述: 操作系统版本:Red Hat Enterprise Linux Server release 6.6 (Santiago) 系统内核版本:2.6.32-504.el6.x86_64 DRB ...
- socket小实例
服务端 using System; using System.Collections.Generic; using System.Linq; using System.Text; using Syst ...
- Android中使用UncaughtExceptionHandler来处理未捕获的异常
原文在sparkyuan.me上.转载注明出处:http://sparkyuan.github.io/2016/03/28/使用UncaughtExceptionHandler来处理未捕获的异常/ 全 ...
- Java精选笔记_自定义标签
自定义标签 自定义标签入门 什么是自定义标签 自定义标签可以有效地将HTML代码与Java代码分离,从而使不懂Java编程的HTML设计人员也可以编写出功能强大的JSP页面 JSP规范中定义了多个用于 ...
- python2.0_day19_后台数据库设计思路
from django.db import models # Create your models here. from django.contrib.auth.models import User ...