设计模式—观察者模式(Observer)

一、什么是观察者模式:观察者模式的定义:定义对象间的一种一对多的依赖关系。当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。这样可能好理解一点:观察者订阅被观察者,被观察者发生改变会通知所有观察者,然后观察者做出相应的行为。例如:我关注了某明星的微博,该明星每发一条新微博,我就会接到该明星发了一条新微博的通知。           这里我就是观察者,该明星...
摘要由CSDN通过智能技术生成

一、什么是观察者模式:

观察者模式的定义:

定义对象间的一种一对多的依赖关系。当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。

这样可能好理解一点:观察者订阅被观察者,被观察者发生改变会通知所有观察者,然后观察者做出相应的行为。

例如:我关注了某明星的微博,该明星每发一条新微博,我就会接到该明星发了一条新微博的通知。

           这里我就是观察者,该明星就是被观察者。

观察者模式的本质: 触发联动

二、观察者模式的两种实现方式:

推模型:    1.推模型是假定目标对象知道观察者需要的具体数据。
                2.推模型会使观察者对象难以复用

拉模型:    1.拉模型是被观察者不知道观察者具体需要什么数据,因此把自身传给观察者,由观察者来取值。
                2.拉模型下,update方法的参数是目标对象本,基本上可以适应各种情况的需要

也就是说 拉模型会将被观察者本身传给观察者,而推模型会将被观察者本身的某些属性传给观察者。

三、观察者模式的实例:

 

1、首先,我们需要定义观察者接口,Observer.java

/**
 * 这是一个观察者接口,定义一个更新的接口给那些在目标发生改变的时候被通知的对象
 * @author lsy
 *
 */
public interface Observer {
	/** 拉模型
	 * 更新的接口
	 * @param weatherSubject 传入目标对象,方便获取相应的目标对象的状态
	 */
	public void update(WeatherSubject weatherSubject);
	/** 推模型
	 * 更新的接口
	 * @param content   传入目标属性
	 */
	public void update(String content);
}

2、然后,我们需要定义目标对象(被观察者),我们以天气作为目标对象, WeatherSubject .java

/**
 * 目标对象(被观察者),它知道它的观察者,并提供注册(添加)和删除观察者的接口
 */
public class WeatherSubject {
	//用来保存注册的观察者对象
	private List<Observer> observers = new ArrayList<Observer>();
	
	//attach detach notifyObservers
	/**
	 * 把订阅天气的人添加到订阅者列表中
	 * @param observer
	 */
	public void arrach(Observer observer) {
		observers.add(observer);
	}
	/**
	 
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值