美文网首页
观察者模式笔记

观察者模式笔记

作者: VerseWang | 来源:发表于2018-01-17 12:19 被阅读0次

      最近在听蔡康永的201堂情商课(原谅我没有冲喜点(#.#)),由于很少听别人谈论情商,听了马东对这个课程的介绍,又试听了n*90秒(每堂课可以试听90秒),特别想听这门课程,但看这喜点,要将近200喜点,突然之间,一万头草泥马从身边呼啸而过,所以投了下机,取了下巧,至于具体细节我就不说了,你懂的( σ_σ),做饭的时候我就拿着手机听,正好打发下做饭的无聊,可谓是一举两得,说一下听后感。我们这个国家受教育的程度越来越高,自身的素质也越来越高,而评价一个人的素质的标准有,通情达理,体谅他人,高尚,见义勇为,有爱心,学识渊博等等,总之就是一些褒义词,我认为素质包括两部分,一,智商,二,情商,智商在我们上学的时候就要用到,人越大,越需要情商,因为我们都需要有一个成功的事业,美满的家庭。这门课程抓住了现代人的G点。说得简单通俗一点,这个课程就是教你怎么做一个好人,但听了大概二十多堂课,有点失望,蔡康永主要是经验之谈,闲话先扯到这里,开始今天的正经事儿

      这一篇是有关Rxjava的第一篇(庆祝一下,好歹也是第一次(#.#)),Rxjava是基于观察者模式建立起来的,那问题来了,什么是观察者模式呢,我很模糊,几乎没用过,用笔记把他记下来

    1.观察者模式介绍

    在Java中通过Observable类和Observer接口实现了观察者模式。一个Observer对象监视着一个Observable对象的变化,当Observable对象发生变化时,Observer得到通知,就可以进行相应的工作

    先上一张图,大致的流程图

    UML类图

    2.撸起柚子就是干

    先将公共的方法提取出来,面向接口编程

    大致流程

    当Subject的具体实现类注册监听事件后(registerObserver())得到观察者对象,当被监听的方法(addAge())改变时,通过注册的观察者对象,面向接口编程,通知观察者改变(notifyObservers())

    2.1观察者(Observer)

    观察者接口

    public interface Observer<T> {
    T update(T t);
    }
    

    2.2被观察者(Subject)

    被观察者接口

    public interface Subject {
    //注册监听
    void registerObserver(Observer observer);
    //移除所有观察者
    void removeAllObserver();
    //移除指定观察者
    void removeOneObserver(Observer observer);
    //通知给观察者
    void notifyObservers();
    }
    

    接下来针对特定的场景,写实现类

    2.3观察者实现类

    public class ConcreteObserver<T> implements Observer<T> {
    
    @Override
    public T update(T t) {
        System.out.print("   "+t);
        return t;
        }
    }
    

    2.4被观察者实现类

    @Override
    public void registerObserver(Observer observer) {
        if (mRegisterList == null) {
            mRegisterList = new ArrayList<Observer>();
        } else {
            System.out.print("yi jing zhu ce le ");
        }
        mRegisterList.add(observer);
    }
    
    @Override
    public void removeAllObserver() {
        if (mRegisterList != null) {
            mRegisterList.clear();
            mRegisterList = null;
        }
    }
    
    @Override
    public void removeOneObserver(Observer observer) {
        if (mRegisterList != null) {
            for (Observer item : mRegisterList) {
                if (observer instanceof ConcreteObserver) {
                    mRegisterList.remove(item);
                    return;
                }
            }
        }
    }
    
    @Override
    public void notifyObservers() {
        if (mRegisterList != null) {
            for (Observer observer : mRegisterList) {
                observer.update(mAge);
            }
        }
    }
    
    //功能扩展
    public void addAge(int age) {
        mAge = age;
        notifyObservers();
    }
    

    3.总结

    很好理解吧,核心思想是面对接口的编程,符合开闭原则,用到了泛型,发现超级好用,希望在工作中多将设计模式用到代码中。

    相关文章

      网友评论

          本文标题:观察者模式笔记

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