美文网首页iOS学习
设计模式-行为篇(观察者模式)

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

作者: 小酷哥 | 来源:发表于2017-02-10 14:18 被阅读0次

    观察者模式

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

    /**
     * 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);
    }
    

    相关文章

      网友评论

        本文标题:设计模式-行为篇(观察者模式)

        本文链接:https://www.haomeiwen.com/subject/jpvgittx.html