设计模式(行为模式)之 观察者模式
下述是百度百科中对模式的介绍:
其实一个程序开发 绝不是搬砖那么简单,不是 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,该字段修改 需修改其它字段的值;” 对这种要求,使用观察者实现 即比较合适。