设计模式之观察者模式

什么是观察者模式?

观察者模式是一种一对多的关系,让多个观察者对象同时监听某一个主题对象.这个主题对象发生变化时会通知所有观察者对象,是他们能够更新自己.

为什么要使用观察者模式?

一个或多个对象需要知道一个对象的行为的改变而做出相应的动作的时候就可以使用观察者模式,这样说估计会有点抽象,打个比方,比如说你养了一只小狗,当你看见这只小狗吐舌头的时候就说明他口渴了,你需要喂它喝水.这里你就是观察者,小狗就是主题.笑,懂?

怎么使用观察者模式?

就拿刚才那个例子说事,俺先去画UML类图先

这里我们把Subject(主题)和Observer(观察者)抽象出来,这样我们具体的smalldog依赖抽象的Observer而具体的Master依赖于抽象的Subject。(依赖倒转原则)

下面来看具体代码怎么时间小狗口渴,主人喂水这个操作.

Subject.class

public abstract class Subject {
	public abstract void addObserver(MyObserver ob);
	public abstract void deleteObserver(MyObserver ob);
	public abstract void notifyobserver();
}

MyObserver.class

public interface MyObserver {
	public void updata();
}

SmallDog.class

public class SmallDog extends Subject{
	private ArrayList<MyObserver> list = new ArrayList<MyObserver>();
	@Override
	public void addObserver(MyObserver ob) {
		// TODO Auto-generated method stub
		list.add(ob);
	}

	@Override
	public void deleteObserver(MyObserver ob) {
		// TODO Auto-generated method stub
		list.remove(ob);
	}

	@Override
	public void notifyobserver() {
		// TODO Auto-generated method stub
		System.out.println("小狗:我渴了...");
		for(MyObserver o : list){
			o.updata();
		}
		
	}

}



Master.class

public class Master implements MyObserver{ 
	@Override
	public void updata() {
		// TODO Auto-generated method stub
		System.out.println("主人:给小狗喂水...");
	}

}

Main.class

public class Main {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		MyObserver observer = new Master();
		Subject subject = new SmallDog();
		subject.addObserver(observer);
		subject.notifyobserver();
	}

}

输出结果:

小狗渴了...
给小狗喂水...

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值