1 观察者模式 observer 模拟监听器的实现
参考(http://blog.csdn.net/allwefantasy/article/details/3062277)
假设我有一台电脑。电脑里面有一个事件,当你按下电源按钮的时候,那么显示器会亮,电源指示灯也会亮。
这是典型的一个类似于GUI中按钮事件模拟。
我们来分析一下需要几个类
电
脑肯定是需要的,我们得出Computer类。Computer类内部有一个按电源按钮的动作,我们叫做clickButton.这个事件我们叫做
EventPowerOn.于是得出了EventPowerOn类。另外,对比GUI里面的button,他们都会添加监听器,所以应该有个监听器类,我
们叫做EventPowerOnListener。好到这里我们基本上找出了几个必须的类Computer,EventPowerOn
,EventPowerOnListener
compute类
package com.da.tool.mode;
import java.util.ArrayList;
import java.util.List; public class Compute {
private List<EventPowerOnListener> listeners=new ArrayList(); public void addEventPowerOnListener(EventPowerOnListener eventPowerOnListener) {
listeners.add(eventPowerOnListener);
} public void click(){
for(EventPowerOnListener temp:listeners) {
temp.performanceToPowerOn(new EventPowerOn(System.currentTimeMillis(),this));
}
}
}
电源键被按下时间类 EventPowerOn
package com.da.tool.mode; public class EventPowerOn { private Object source;//事件的来源,也就是时间是由哪一个对象激发的
private long time;//这个属性是随意添加的 比如社么时候电源按钮被按下 public EventPowerOn( long time, Object object) {
this.source = object;
this.time = time;
}
public Object getObject() {
return source;
}
public void setObject(Object object) {
this.source = object;
}
public long getTime() {
return time;
}
public void setTime(long time) {
this.time = time;
}
}
监听接口类
package com.da.tool.mode; public interface EventPowerOnListener {
public void performanceToPowerOn(EventPowerOn eventPowerOn);//改方法是电源按钮被按后应的响应
}
灯光类
package com.da.tool.mode; public class Light implements EventPowerOnListener{
public void performanceToPowerOn(EventPowerOn eventPowerOn) {
System.out.println(eventPowerOn.getTime());
System.out.println("power light is on");
}
}
屏幕类
package com.da.tool.mode; public class Screen implements EventPowerOnListener { public void performanceToPowerOn(EventPowerOn eventPowerOn) {
System.out.println(eventPowerOn.getTime());
System.out.println("Screen is on");
}
}
测试类
package com.da.tool.mode; public class testObserver {
public static void main(String[] args){
Compute computer=new Compute();
Screen screen=new Screen();
Light light=new Light();
computer.addEventPowerOnListener(screen);
computer.addEventPowerOnListener(light);
computer.click();
};
}
测试结果:
1491806527242
Screen is on
1491806527242
power light is on
1 观察者模式 observer 模拟监听器的实现的更多相关文章
- 8.5 GOF设计模式四: 观察者模式Observer
GOF设计模式四: 观察者模式Observer 现实中遇到的问题 当有许多不同的客户都对同一数据源感兴趣,对相同的数据有不同的处理方式,该如 何解决?5.1 定义: 观察者模式 观察者模式 ...
- Java 设计模式系列(十五)观察者模式(Observer)
Java 设计模式系列(十五)观察者模式(Observer) Java 设计模式系列目录(https://www.cnblogs.com/binarylei/p/10198698.html) Java ...
- 设计模式 - 观察者模式(Observer Pattern) 详细说明
观察者模式(Observer Pattern) 详细说明 本文地址: http://blog.csdn.net/caroline_wendy/article/details/26583157 版权全部 ...
- 设计模式 ( 十六 ) 观察者模式Observer(对象行为型)
设计模式 ( 十六 ) 观察者模式Observer(对象行为型) 1.概述 一些面向对象的编程方式,提供了一种构建对象间复杂网络互连的能力.当对象们连接在一起时,它们就可以相互提供服务和信息. 通常来 ...
- 乐在其中设计模式(C#) - 观察者模式(Observer Pattern)
原文:乐在其中设计模式(C#) - 观察者模式(Observer Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 观察者模式(Observer Pattern) 作者:weba ...
- 设计模式 - 观察者模式(Observer Pattern) 详细解释
观察者模式(Observer Pattern) 详细解释 本文地址: http://blog.csdn.net/caroline_wendy/article/details/26583157 版权全部 ...
- java设计模式--观察者模式(Observer)
java设计模式--观察者模式(Observer) java设计模式--观察者模式(Observer) 观察者模式的定义: 定义对象间的一种一对多的依赖关系.当一个对象的状态发生改变时,所有依赖于它的 ...
- 观察者模式 Observer 发布订阅模式 源 监听 行为型 设计模式(二十三)
观察者模式 Observer 意图 定义对象一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖他的对象都得到通知并自动更新. 别名:依赖(Dependents),发布订阅(Publish-Su ...
- 设计模式-观察者模式(Observer Pattern)
观察者模式(Observer Pattern):定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象.这个主题对象在状态发生变化时,会通知所有观察者对象,使他们能够自动更新自己. 观察者 ...
随机推荐
- LeetCode 42接雨水 按行求解(差分+排序)
按行求解的思路比较清晰明了,但是这个方法的复杂度高达O(heightSize*sum(height[i])),几乎高达O(N^2). 但是也并不是不可以解决,经观察我们可以发现,这个算法的缺点在于要遍 ...
- 进程池与线程池、协程、协程实现TCP服务端并发、IO模型
进程池与线程池.协程.协程实现TCP服务端并发.IO模型 一.进程池与线程池 1.线程池 ''' 开进程开线程都需要消耗资源,只不过两者比较的情况下线程消耗的资源比较少 在计算机能够承受范围内最大限度 ...
- 1.1、webrtc的历史和现状
1.1.webrtc的历史和现状 本书目录 温馨提示:本书的内容,将按照顺序一一展开,上篇文章阐述本书的诞生的原因,推荐阅读方式等. 如果你还没有阅读上一篇文章(必读前言—— 作者的独白),我建议返回 ...
- Python(二) isinstance
原文链接: http://www.baike.com/wiki/isinstance&prd=jinshan https://www.liaoxuefeng.com/wiki/00143160 ...
- 【原】docker-compose 管理docker的多容器配置
docker-compose管理docker的多容器配置,实现docker的自动化. version: '3.4' x-defaults: &defaults restart: unless- ...
- php substr的一些用法
//去掉最后一个字符$str = "1,2,3,4,5,6,"; $newstr = substr($str,0,strlen($str)-1); echo $newstr; ub ...
- Steam 游戏 《Sudoku Universe(数独宇宙)》——[数独基本局分析]
日期:2020.02.12 博客期:152 星期三 老师给的任务都做完了,15篇博客也都写好了,剩下的几天居然还要每天写一篇~唉~为难我 PH ,剩下的几天就把 我的数独要义分享一下吧! 1.基本局规 ...
- 炼金术(1): 识别项目开发中的ProtoType、Demo、MVP
软件开发是很分裂的,只有不断使用原则和规律,才能带来质量. 只要不是玩具性质的项目,项目应该可以大概划分为0-1,1-10,10-100,100-1000四个种重要阶段.其中,0-1是原型验证性的:1 ...
- Ext插件中控件的xtype和类的对应关系总结
xtype Class ------------- ------------------ box Ext.BoxComponent button Ext.Button buttongroup Ext. ...
- 收藏---wordpress搭建出来的blog
http://blog.luofei.org/2012/02/painters-and-paintings-through-the-eyes-of-faith/