设计模式(行为模式)之 观察者模式

下述是百度百科中对模式的介绍:

其实一个程序开发 绝不是搬砖那么简单,不是 copy 那么随意;

程序的开发是一门艺术,要根据具体情况考虑程序的易用性、扩展性及可复用性,不是简单的把功能码出来。码功能时 也需要有清晰的逻辑及注释,考虑到后续维护及调整;只所以说这些,是个人在工作中吃过这方面的亏。。

正处于学习设计模式的过程中,记录下自己的理解及例子,方便以后查阅。。。

 

观察者模式:观察者,顾名思义 就是关注的人;比如:你过生日,你老婆晓得了 给你买了个手机;爸妈知道了  要庆祝一下,做了一桌子好菜;铁哥们知道了 要出去嗨皮一下; 

这个例子中,“你老婆” “爸妈” "铁哥们" 就是观察者对象,而“过生日” 就是“主题”对象;

package my.observer;

/**
* 主题 对象
*/
public abstract class ISubject {
/**
* 注册观察者
*
* @param observer
*/
protected abstract void register(IObserver observer);

/**
* 取消观察者
*
* @param observer
*/
protected abstract void unRegister(IObserver observer);

/**
* 激活所有观察者
*/
protected abstract void notifyObservers();
}

package my.observer;

/**
* 观察者 接口
*/
public interface IObserver {
/**
* 更新 方法
*
* @param data 主体对象数据
*/
void refresh(String data);
}
package my.observer;

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

/**
* 过生日
*/
public class BirthdaySubject extends ISubject {
/**
* 观察者集合
*/
private List<IObserver> observerList = new ArrayList<IObserver>();
private String thing;

public BirthdaySubject() {
thing = "过生日";
}

@Override
protected void register(IObserver observer) {
observerList.add(observer);
}

@Override
protected void unRegister(IObserver observer) {
observerList.remove(observer);
}

@Override
protected void notifyObservers() {
//循环触发所有观察者事项
for (IObserver iObserver : observerList) {
iObserver.refresh(thing);
}
}
}
主体对象:

调用: 

结果:

 

观察者 模式:是将主体对象(过生日)推送 给每个观察者,观察者 拿到数据后 做出对应的响应。

又如:设计对某个字段调整做监听。“字段修改, 1,输出修改日志;2,记录修改前后的值;3,该字段修改 需修改其它字段的值;”  对这种要求,使用观察者实现 即比较合适。


posted @ 2017-03-05 00:25  鱼在天上飞  阅读(262)  评论(0编辑  收藏  举报