设计模式-行为篇(观察者模式)

观察者模式

当对象间存在一对多关系时。
比如:当一个对象被修改时,则会自动通知它的依赖对象。

/**
 * Created by malei on 2016/12/6.
 */
public class EventBus implements Subject{
    //观察者集合,用于管理所有的观察
    List<Observer> mList = new ArrayList<>();
    @Override
    public void addObserver(Observer observer) {
        if (observer == null) {
            throw new NullPointerException("observer == null");
        }
        if (!mList.contains(observer)) {
            mList.add(observer);
        }
    }
    @Override
    public void removeObserver(Observer observer) {
        mList.remove(observer);
    }
    @Override
    public void notifyAllObserver(Object data) {
        for (Observer observer : mList) {
            observer.update(this, data);
        }
    }
    public static void main(String[] args){
        EventBus bus = new EventBus();
        bus.addObserver(new ObserverOne());
        bus.addObserver(new ObserverTwo());
        bus.notifyAllObserver("大家好");
    }
}

/**
 * Created by malei on 2016/12/6.
 * 抽象主题,被观察者
 * 事件源接口
 */
public interface Subject {

    //添加观察者
    void addObserver(Observer observer);
    //移除指定的观察者
    void removeObserver(Observer observer);
    //通知所有观察者
    void notifyAllObserver(Object data);
}

/**
 * Created by malei on 2016/12/6.
 */
public class ObserverOne implements Observer{
    @Override
    public void update(Subject subject, Object data) {
        Log.show("ObserverOne得到了通知"+ ((String )data).toString());
    }
}

/**
 * Created by malei on 2016/12/6.
 */
public class ObserverTwo implements Observer{
    @Override
    public void update(Subject subject, Object data) {
        Log.show("ObserverTwo得到了通知"+ ((String )data).toString());
    }
}

/**
 * Created by malei on 2016/12/6.
 * 观察者接口
 */
public interface Observer {
    void update(Subject subject,Object data);
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1 场景问题# 1.1 订阅报纸的过程## 来考虑实际生活中订阅报纸的过程,这里简单总结了一下,订阅报纸的基本流程...
    七寸知架构阅读 4,679评论 5 57
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,933评论 18 139
  • 设计模式汇总 一、基础知识 1. 设计模式概述 定义:设计模式(Design Pattern)是一套被反复使用、多...
    MinoyJet阅读 3,978评论 1 15
  • 设计模式基本原则 开放-封闭原则(OCP),是说软件实体(类、模块、函数等等)应该可以拓展,但是不可修改。开-闭原...
    西山薄凉阅读 3,880评论 3 14
  • 前段时间,在自己糊里糊涂地写了一年多的代码之后,接手了一坨一个同事的代码。身边很多人包括我自己都在痛骂那些乱糟糟毫...
    丑小丫大笨蛋阅读 1,394评论 0 3