定义对象间的一种一对多依赖关系,使得每当一个对象改变状态,则其相关依赖的对象都能得到通知并被自动更新.
定义两个接口:
观察者接口(提供更新等操作的方法)
package DesignPattern.ObserverPattern;
public interface AlarmListener {
public void alarm();
}
被观察者接口:(提供注册观察者实现类的方法,提供将改变通知观察者实现类的方法)
package DesignPattern.ObserverPattern;
public interface SensorInterface {
public void register(AlarmListener al);
public void soundTheAlarm();
}
具体被观察者定义:
package DesignPattern.ObserverPattern;
import java.util.Enumeration;
import java.util.Vector;
/**
* 传感器系统
*
*/
public class SensorSystem implements SensorInterface {
Vector v=new Vector();
/**
* 注册监听者
*/
public void register(AlarmListener al) {
v.addElement(al);
}
/**
* 发送告警
*/
public void soundTheAlarm() {
Enumeration e=v.elements();
while(e.hasMoreElements()){
AlarmListener al=null;
al=(AlarmListener)e.nextElement();
al.alarm();
}
} }
观察者实现类:
package DesignPattern.ObserverPattern;
public class AutoDefense implements AlarmListener{
public void alarm() {
System.out.println("********发现威胁*******");
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(" 开始启动自动防御系统......");
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("********检测到入侵源是一队恐怖分子*****");
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
package DesignPattern.ObserverPattern;
public class Gun implements AlarmListener {
public void alarm() {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("武器瞄准中......");
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("***开枪***");
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("恐怖分子已经全部击毙");
}}
测试类:
package DesignPattern.ObserverPattern;
import DesignPattern.ObserverPattern.AlarmListener;
import DesignPattern.ObserverPattern.SensorSystem;
import DesignPattern.ObserverPattern.SensorInterface;;
public class ClientTest {
public static void main(String[] args){
SensorInterface sensor=new SensorSystem();
sensor.register(new AutoDefense());
sensor.register(new Gun());
sensor.soundTheAlarm();
}
}
分享到:
相关推荐
观察者模式实例代码,附详细注释~~
实现软件模式中的观察者模式,观察者观察对象的状态,当对象的状态发生变化时,将会打印发生变化的对象。简单的一个demo实例
c++中应用的观察着模式,软件环境是cocos2d-x,因为个人觉得还是很详细的思维值得借鉴。只是代码,没有readme文档导读
观察者模式实例,用到java的继承,多态,加深概念理解.
IOS 观察者模式实例Demo IOS 设计 模式 观察者 Demo
java 设计模式 观察者模式 简单实例 包括测试test类
采用Java语言编写的一个观察者模式实例。观察者模式(有时又被称为模型-视图(View)模式、源-收听者(Listener)模式或从属者模式)是软件设计模式的一种。在此种模式中,一个目标物件管理所有相依于它的观察者物件,...
这是我在学习工程中自己对这个模式的理解,大家可以看看
针对所有涉及的,监听者模式,观察者模式,订阅者模式的举例介绍,让大家更清晰的理解这几种模式的本质
设计模式--观察者模式java例子
观察者模式是目前应用最广、影响范围最大的模式之一,因为 Observer 的一个实例 MVC结构(Model/View/Control )在系统开发架构设计中有着很重要的地位和意义,实现了业务逻辑和表示层的解耦。下面示例代码以篮球...
本文实例讲述了Android观察者模式。分享给大家供大家参考。具体分析如下: 一、环境: 主机:WIN8 开发环境:Eclipse 二、说明: 1.打开sd卡中的xml文件,如果不存在,这新建一个,并写入默认配置 2.读取xml文件 3....
一个天气预报的小功能,可以分析一下观察者模式。
经典观察者应用实例
通过事例和代码,详细介绍了Observer模式在android中的应用
现在有许多炒股软件都为股民们提供了股价涨跌提示的功能,当股价涨跌幅度达到5%时,软件就会向股民某某人发出消息,提示股价波动幅度超过5%,并给出当前价格。用观察者模式设计整个过程。
观察者模式的简单例子,根据《Head First设计模式》第2章中的天气预告版的例子编写
主要介绍了Java编程之内置观察者模式,结合实例形式较为详细的分析了java内置观察者模式的原理、实现方法及相关注意事项,需要的朋友可以参考下
超级实用的观察者模式案例
设计模式之观察者模式,通过形象的例子,来理解!形象化