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(); } }
  • 结果:

观察者模式多用于消息队列的发布与订阅。以后会经常用到,需多加注意!

最新文章

  1. LCQCL
  2. JavaScript SetInterval与setTimeout使用方法详解
  3. mongodb嵌套查询
  4. 【Oracle】Oracle 11g 64位安装完后,ora-12541错误和ora-12514错误的解决
  5. Jquery表格变色 复选框全选,反选
  6. WCF: 没有终结点在侦听可以接受消息的 这通常是由于不正确的地址或者 SOAP 操作导致的。
  7. wcf 双工
  8. VMware Snapshot 工作原理
  9. JLINK SWD下载模式引脚
  10. poj3159 最短路(差分约束)
  11. hive安装(一)
  12. Java [Leetcode 144]Binary Tree Preorder Traversal
  13. 部署在腾讯云的公益网站遭受了一次CC攻击
  14. AppDelegate 里一个基本的跳转方法,用来在rootView崩溃的时候直接调试我自己的页面
  15. appium 【已解决】Android,每次启动手机中都会安装Appium settings和Unclock的方法
  16. Android Intent 传递数据注意事项
  17. ssh-copy-id 拷贝用户秘钥
  18. 最简单的spring boot web项目
  19. python-猜数字小练习
  20. day14_雷神_前端02

热门文章

  1. 巧用JS中的join方法操作字符串
  2. SVN版本冲突,导致出现Files 的值“ < < < < < < < .mine”无效。路径中具有非法字符。
  3. 在loadrunner中使用winsocket协议编写脚步三部曲
  4. make的自动变量和预定义变量
  5. 解决RaycastTarget勾选过多的烦恼
  6. 阮一峰---javascript系列
  7. VR资源浏览网站
  8. 实现Runnable接口和继承Thread类区别
  9. js中hover事件时候的BUG以及解决方法
  10. springAOP实现(含实例)