Java观察者模式

标签: java 观察者 模式 | 发表时间:2013-10-05 08:28 | 作者:u011384252
出处:http://blog.csdn.net

Java观察者模式(Observer Pattern),简单说观察者模式包含四种角色:抽象被观察者角色、抽象观察者角色、具体被观察者角色和具体观察者角色;其中Java本身提供观察者模式的接口供开发者使用,在 java.util包下,包含接口Observer及类Observable,接口Observer是扮演抽象观察者角色,包含一个update()方法,;而类Observable则扮演抽象被观察者角色,开发者只需要继承该类就能很好的运用观察者模式。闲话少说,贴出code供参考:

~~抽象被观察者角色~~

/**
 * @author Verphen
 * @date 2013年10月4日  下午11:02:21
 */

package org.verphen.observer;

/*抽象被观察者角色*/
public interface IWitched {

	/* 添加观察者 */
	public void addWitcher(IWitchers w);

	/* 删除观察者 */
	public void deleteWitcher(IWitchers w);

	/* 被观察者 发生变化,通知观察者 */
	public void notifyWitcher(Object o);
}

~~抽象观察者角色~~

/**
 * @author Verphen
 * @date 2013年10月4日  下午11:06:57
 */

package org.verphen.observer;

/*抽象观察者角色*/
public interface IWitchers {

	/* 当被观察者发生变化,接到通知做出反应,更新操作 */
	public void update(Object o);
}

~~具体被观察者角色~~

/**
 * @author Verphen
 * @date 2013年10月4日  下午11:15:20
 */

package org.verphen.observer;

import java.util.ArrayList;
import java.util.List;

/*具体被观察者角色*/
public class ConcreteWitched implements IWitched {

	/* save witchers list */
	private List<IWitchers> list = new ArrayList<IWitchers>();

	@Override
	public void addWitcher(IWitchers w) {
		list.add(w);
	}

	@Override
	public void deleteWitcher(IWitchers w) {
		list.remove(w);
	}

	@Override
	public void notifyWitcher(Object o) {
		for (IWitchers l : list) {
			l.update(o);
		}
	}
}

~~具体观察者角色~~

/**
 * @author Verphen
 * @date 2013年10月4日  下午11:16:56
 */

package org.verphen.observer;

/*具体观察者角色*/
public class ConcreteWitchers implements IWitchers {

	@Override
	public void update(Object o) {
		System.out.println(o);
	}
}

~~测试类~~

/**
 * @author Verphen
 * @date 2013年10月4日  下午11:27:18
 */

package org.verphen.observer;

/* observer pattern test class*/
public class TestWitch {
	public static void main(String[] args) {

		/* witched : girl */
		IWitched girl = new ConcreteWitched();

		/* witchers */
		IWitchers witcher1 = new ConcreteWitchers();
		IWitchers witcher2 = new ConcreteWitchers();
		IWitchers witcher3 = new ConcreteWitchers();

		/* witched add witchers */
		girl.addWitcher(witcher1);
		girl.addWitcher(witcher2);
		girl.addWitcher(witcher3);

		girl.notifyWitcher(args);
	}
}

作者:u011384252 发表于2013-10-5 0:28:32 原文链接
阅读:13 评论:0 查看评论

相关 [java 观察者 模式] 推荐:

Java观察者模式

- - CSDN博客架构设计推荐文章
闲话少说,贴出code供参考:. /** * @author Verphen * @date 2013年10月4日 下午11:02:21 */ package org.verphen.observer; /*抽象被观察者角色*/ public interface IWitched {. /* 被观察者 发生变化,通知观察者 */.

Java中的观察者模式

- - CSDN博客编程语言推荐文章
这个接口定义了一个update()方法,当被观察者对象的状态发生变化时,这个方法就会被调用. 这个方法的实现类应当调用每一个被观察者对象的notifyObservers()方法,从而通知所有的观察对象. 被观察者类都是java.util.Observable类的子类. 这个类主要提供下面几个方法:.

浅学设计模式之观察者模式及在android中的应用

- - CSDN博客推荐文章
        最近在学习下设计模式,而加深学习的不错的方法就是把心得写出来吧. 现在自己看的书是《head.Frist设计模式》这本书.         观察者模式(有时又被称为发布-订阅模式、模型-视图模式、源-收听者模式或从属者模式)是 软件设计模式的一种.

Java回调与模板方法模式

- - ITeye博客
一.Java回调与模板方法模式 . 模板方法模式很常用,其目的是在一个方法中定义一个算法骨架,而将一些步骤延迟到子类中. 模板方法使得子类可以在不改变算法结构的情况下,重新定义算法的某些步骤. 在标准的模板方法模式实现中,主要是使用继承的方式,来让父类在运行期间可以调用到子类的方法. 其实在Java开发中,还有另外一个方法可以实现同样的功能,那就是Java回调技术,通过回调在接口中定义的方法,调用到具体的实现类中的 方法,其本质是利用Java的动态绑定技术,在这种实现中,可以不把实现类写成单独的类,而使用内部类或匿名内部类来实现回调方法.

ZeroMQ(java)入门之Requerst/Response模式

- - CSDN博客架构设计推荐文章
自己最开始是在cloud foundry中接触过消息服务器(nats),或者说是消息中间件,也算是初步知道了一个消息服务器对于分布式的网络系统的重要性,后来自己也曾想过在一些项目中使用它,尤其是在一些分布式的环境下,可以极大的方便整个系统的实现. 在中间通过一个消息中间件,可以很方便的将各个woker的数据发送到最终的统计服务器来做数据的统计,从而减少很多在网络通信中会消耗的编程时间.

[转]java 混合模式 ,解释模式 (java.vm.info=mixed mode, sharing)

- - 小鸥的博客
 设置zip/jar资源或者类(.class文件)存放目录路径.  追加zip/jar资源或者类(.class文件)存放目录路径.  预先加载zip/jar资源或者类(.class文件)存放目录路径.  设置JVM初始化堆内存大小.  设置JVM最大的堆内存大小.  执行严格的代码检查,预测可能出现的情况.

DOM世界的观察者

- - 博客园_Ruby's Louvre
浏览器自带的观察者实在太多了. 经典的不用说,就是onclick, attachEvent, addEventListner,可惜它们只是监听用户的行为. 不过这当中有个特例是propertychange,当元素的属性,不管是自定义还是原生,只要发生改变,就会触发回调. 我们还可以通过它的事件对象的propertyName知道那个元素发生改变.

Android的内容观察者

- - CSDN博客移动开发推荐文章
有个很常见的需求就是当有新的短信来的时候,把内容显示在界面上. 就是让你的程序监视短信,如果他内容发生变化的时候,你去获取. 而短信那边做的情况就 是,当他自己的数据变化时,他告诉有个公共短信内存区,他说,我数据变化了. 然后通过短信的内容提供者把短信的内容拿到公共内存区,你的程序再过去拿. 作者:howlaa 发表于2014-3-8 23:31:28 原文链接.

多核系统上的 Java 并发缺陷模式(bug patterns)

- yat - IBM developerWorks 中国 : 文档库
通过研究并发(bug patterns)缺陷模式,您既能够提高对并发编程的理解,还能够了解如何发现无效或可能无效的编程方法. 在本文中,作者 Zhi Da Luo、Yarden Nir-Buchbinder 和. Raja Das 阐述了 6 个鲜为人知的、可能威胁运行在多核系统上的 Java 应用程序的线程安全和性能的并发缺陷.

java+适配器模式 实现自己的迭代器...

- - CSDN博客推荐文章
 * 我们有时候希望迭代器迭代的不仅仅是正向 而且也希望在迭代器中增加一些新的方法...那么就是用适配器模式 .  * 因为我们知道默认for 之所以能迭代 集合原因是集合实现了Iterable接口 并且实现了 iterator方法.  * 因为我们想要多种功能所以我们不可以覆盖 iterator方法.