Java观察者模式

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

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

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

package org.effine.observer;

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

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

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

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

~~抽象观察者角色~~

/**
 * @author <span style="font-family: Arial, Helvetica, sans-serif;">effine</span>
 * @date 2013年10月4日  下午11:06:57
 */

package org.effine.observer;

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

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

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

/**
 * @author <span style="font-family: Arial, Helvetica, sans-serif;">effine</span>
 * @date 2013年10月4日  下午11:15:20
 */

package org.effine.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 <span style="font-family: Arial, Helvetica, sans-serif;">effine</span>
 * @date 2013年10月4日  下午11:16:56
 */

package org.effine.observer;

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

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

~~测试类~~

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

package org.effine.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);
	}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值