设计模式之观察者模式学习笔记

         观察者模式(Observer)完美的将观察者和被观察的对象分离开。举个例子,用户界面可以作为一个观察者,业务数据是被观察者,用户界面观察业务数据的变化,发现数据变化后,就显示在界面上。面向对象设计的一个原则是:系统中的每个类将重点放在某一个功能上,而不是其他方面。一个对象只做一件事情,并且将他做好。观察者模式在模块之间划定了清晰的界限,提高了应用程序的可维护性和重用性。

 

写一个模拟实例:

1、被观察者自身的行为活动的抽象

/**
 * 角色:被观察者自身的行为活动
 * 
 * 知己知彼观察者模式:间谍观察韩非子的活动
 * 
 * @author - 2014-6-23 吖大哥 创建初始版本
 * 
 */
public interface IHanFeiZi {

	// 韩非子踢足球
	public void playFootBall();

	// 韩非子思考问题
	public void thinkQuestion();
}

 

2、被观察者对象

/**
 * 角色:被观察者对象
 * 
 * 被观察者可以自动添加多个不同的观察者并可以移除观察者对象
 * 
 * @author - 2014-6-23 吖大哥 创建初始版本
 * 
 */
public interface Observeable {

	// 添加
	public void addObserver(Observer o);

	// 删除
	public void delObserver(Observer o);

	// 通知
	public void notifyObserver(String context);
}

 

3、被观察者实例对象

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

public class HanFeiZi implements IHanFeiZi, Observeable {

	private List<Observer> list = new ArrayList<Observer>();

	@Override
	public void addObserver(Observer o) {
		list.add(o);
	}

	@Override
	public void delObserver(Observer o) {
		list.remove(o);
	}

	@Override
	public void notifyObserver(String context) {
		for (Observer ob : list) {
			ob.update(context);
		}
	}

	@Override
	public void playFootBall() {
		System.out.println("韩非子要踢世界杯了***************");
		this.notifyObserver("踢足球");
	}

	@Override
	public void thinkQuestion() {
		System.out.println("韩非子开始思考战略谋划了***************");
		this.notifyObserver("思考问题");
	}

}

 

4、观察者行为抽象

/**
 * 角色:观察者抽象行为
 * 
 * 当发现被观察者行为变动之后自身做出相应的反应
 * 
 * @author - 2014-6-23 吖大哥 创建初始版本
 * 
 */
public interface Observer {

	public void update(String context);
}

 

5、具体观察者实现

       5.1  观察者1

//观察者李斯
public class Lisi implements Observer {

	@Override
	public void update(String context) {
		System.out.println("Lisi 观察到了韩非子在进行:" + context);
	}

}

 

       5.2  观察者2

//观察者王斯
public class WangSi implements Observer {

	@Override
	public void update(String context) {
		System.out.println("Wangsi 观察到了韩非子在进行:" + context);
	}

}

 

6、客户端调用测试

//测试客户端   当被观察者执行某个活动之后则会广播给所有的监听观察者,与此同时观察者会做出相应的反应
public class Client {

	public static void main(String[] args) throws InterruptedException {
		HanFeiZi han = new HanFeiZi();

		// 创建观察者
		Observer lisi = new Lisi();
		Observer wangsi = new WangSi();

		// 对被观察者添加观察者对象
		han.addObserver(lisi);
		han.addObserver(wangsi);

		// 被观察者执行活动
		han.playFootBall();

		Thread.sleep(2000);
		System.out.println("\n ================================ \n");

		// 被观察者执行活动
		han.thinkQuestion();
	}
}

 

7、类图结构

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值