【php精品源码栏目提醒】:文章导读:在新的一年中,各位网友都进入紧张的学习或是工作阶段。
网学会员整理了php精品源码-07观察者模式Ok - 媒体广告的相关内容供大家参考,祝大家在新的一年里工作和学习顺利!
简介 观察者模式(Observer)是对象的行为模 式,又称: 发布-订阅模式(Publish/Subscribe)、 源-监听器Source/Listener 观察者模式 观察者模式定义了一个一对多的依赖关 系,让一个或多个观察者对象监察一个 主题对象。
这样一个主题对象在状态上的变化能够 通知所有的依赖于此对象的那些观察者 对象,使这些观察者对象能够自动更新观察者模式类图源代码 源代码 源代码 源代码抽象主题(Subject)角色 主题角色把所有的观察者对 象的引用保存在一个列表里; 每个主题都可以有任何数量 的观察者。
主题提供一个接口可以加上 或撤销观察者对象;主题角 色又叫做抽象被观察者 Observable角色; 具体主题(ConcreteSubject)角色 保存对具体观察 者对象有用的内 部状态; 在这种内部状态 改变时给其观察 者发出一个通知; 具体主题角色又 叫作具体被观察 者角色;具体观察者(ConcreteObserver)角色 保存一个指向具体 主题对象的引用; 具体观察者角色实 现抽象观察者角色 所要求的更新自己 的接口,以便使本 身的状态与主题的 状态自恰。
观察者模式在Java中 从AWT1.1开始视窗系统的事件模型采用 观察者模式,因此观察者模式在Java语 言里的地位较为重要。
在Java语言的java.util库里面,提供了 一个Observable类以及一个Observer接 口,构成Java语言对观察者模式的支持。
Java观察者模式类图 Observable类 被观察者类都是 java.util.Observable类 的子类 Observer接口 package java.util public interface Observer / 当被观察的对象发生变化时,这个方法会被调用。
/ void updateObservable o Object arg 举例 被观察者对象叫做Watched,也就是被监 视者; 观察者对象叫做Watcher,也就是监视人 的意思。
Watched对象继承自java.util.Observable Watcher对象实现了java.util.Observer接口 对象Test,扮演客户端角色举例类图 源代码 源代码 源代码 小结 一个软件系统里面包含了各种对象,就 像一个欣欣向荣的森林充满了各种生物 一样。
在一片森林中,各种生物彼此依 赖和约束,形成一个个生物链。
一个生物的状态变化会造成其他一些生 物的相应行动,每一个生物都处在别的 生物的互动之中。
源代码:Subject接口 public interface Subject public void attachObserver observer public void detachObserver observer void notifyObservers attach 用来增加一个观察者对象;detach 用来删除一个观察者对象;notifyObservers 用来通知各个观察者刷新它们自己。
返回源代码:ConcreteSubject类 import java.util.Vector import java.util.Enumeration public class ConcreteSubject implements Subject public void attachObserver observer observersVector.addElementobserver public void detachObserver observer observersVector.removeElementobserver public void notifyObservers Enumeration enumeration observers while enumeration.hasMoreElements Observerenumeration.nextElement.update public Enumeration observers return (Vector observersVector.clone.elements private Vector observersVector new java.util.Vector 返回 源代码:Observer接口 public interface Observer void update 返回 源代码:ConcreteObserver类 public class ConcreteObserver implements Observer public void update // Write your code here 返回源代码:Tester.java import java.util.Observer public class Tester static private Watched watched static private Observer watcher public static void mainString args watched new Watched watcher new Watcherwatched watched.changeDataIn C we create bugs. watched.changeDataIn Java we inherit bugs. watched.changeDataIn Java