设计模式之观察者模式

设计模式 3xcn.com@站长2019年8月7日 pm6:59发布5年前 (2019)更新
0
导航号,我的单页导航
目录

观察者模式是使用频率最高的设计模式之一,它用于建立一种对象与对象之间的依赖关系,一个对象发生改变时将自动通知其他对象,其他对象将相应作出反应。

观察者模式定义

观察者模式(Observer Pattern):定义对象之间的一种一对多依赖关系,使得每当一个对象状态发生改变时,其相关依赖对象皆得到通知并被自动更新。观察者模式的别名包括发布-订阅(Publish/Subscribe)模式、模型-视图(Model/View)模式、源-监听器(Source/Listener)模式或从属者(Dependents)模式。观察者模式是一种对象行为型模式。

 

简单的写了一个demo学习一下观察者模式。

1、Subject 接口

package com.la.observer;

/**
 * 
 * 抽象观察目标
 *
 */
public interface Subject {

	public void attach(Observer observer);

	public void detach(Observer observer);

	public void notify(boolean change);
}

2、Observer 接口

package com.la.observer;

/**
 * 
 * 抽象观察者
 *
 */
public interface Observer {
	public void update(boolean change);
}

3、SiteSubject 具体目标类

package com.la.observer;

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

/**
 * 
 * 具体目标:网站更新,这里可以存储多个观察者,网站更新后一一通知
 *
 */
public class SiteSubject implements Subject {

	// 用于存储观察者
	private List<Observer> list = new ArrayList<Observer>();

	@Override
	public void attach(Observer observer) {
		if (null != observer) {
			list.add(observer);
		}
	}

	@Override
	public void detach(Observer observer) {
		if (!list.isEmpty()) {
			list.remove(observer);
		}
	}

	@Override
	public void notify(boolean change) {
		// 通知所有观察者
		for (Observer observer : list) {
			observer.update(change);
		}
	}

}

4、UserObserver 具体观察者类

这是定义的一个用户观察者,当网站更新时,这里的update方法会被回调。

package com.la.observer;

/**
 * 
 * 具体观察者:用户
 *
 */
public class UserObserver implements Observer {

	@Override
	public void update(boolean change) {
		// 这里会被回调
	}

}

5、总结

在观察者模式中,发生改变的对象称为观察目标,而被通知的对象称为观察者,一个观察目标可以对应多个观察者,而且这些观察者之间可以没有任何相互联系,可以根据需要增加和删除观察者,使得系统更易于扩展。

版权声明 1、 本站名称 91易搜
2、 本站网址 https://www.91es.com/
3、 本站部分文章来源于网络,仅供学习与参考,如有侵权请留言
4、 本站禁止发布或转载任何违法的相关信息,如有发现请向站长举报
导航号,我的单页导航

暂无评论

评论审核已启用。您的评论可能需要一段时间后才能被显示。

暂无评论...