zoukankan      html  css  js  c++  java
  • 设计模式(行为模式)之 观察者模式

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

    其实一个程序开发 绝不是搬砖那么简单,不是 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,该字段修改 需修改其它字段的值;”  对这种要求,使用观察者实现 即比较合适。

    
    
  • 相关阅读:
    oracle触发器
    oracle存储函数
    ****Java程序调用存储过程****
    oracle储存过程--存储过程
    oracle储存过程--游标
    oracle存储过程--流程控制(条件判断和循环遍历)
    InterviewProblems
    RandomAccessFile浅析
    JSP基础——关于中文乱码问题
    基础数据结构——单链表
  • 原文地址:https://www.cnblogs.com/fish-in-sky/p/6503447.html
Copyright © 2011-2022 走看看