Android 开发模式和优秀框架那些事

设计模式之四——观察者模式

2019-06-14  本文已影响19人  dd299

原文传送门

1 介绍

观察者模式,又叫做发布/订阅(publish/subscribe)模式,属于对象的行为模式。

1.1 什么是观察者模式

观察者模式定义了一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。

1.2 解决什么样的问题

当一个对象的改变(名词)需要改变(动词)其他对象的时候。

观察者模式可以解决什么问题:

1、应该定义对象间一对多的依赖关系,而不使对象紧密耦合。(达到依赖关系,又不紧耦合)

2、应该确保一个对象改变时,无限制的依赖对象自动更新。

3、应该一个对象可以通知无限制的其他对象。

第2种情况,消息中间件就是实现之一,当一个生产者发送消息过来,无限制的消费者拿到消息自动更新自己。

第3中情况,发布-订阅推模式,微信公众号应该就是其中有代表性的,当有内容更新,主动通知订阅者。

2 原理

2.1 uml图

观察者模式中的角色有:

2.2 代码示例

Subject代码示例

public interface Subject {

    /**
     * 增加订阅者
     * @param observer
     */
     void attach(Observer observer);
    /**
     * 删除订阅者
     * @param observer
     */
    void detach(Observer observer);

    /**
     * 通知订阅者更新消息
     */
    void notify(String message);

}

ConcreteSubject代码示例

public class ConcreteSubject implements  Subject {

    private List<Observer> observers =new ArrayList<Observer>();

    @Override
    public void attach(Observer observer) {
        observers.add(observer);

    }

    @Override
    public void detach(Observer observer) {
        observers.remove(observer);
    }

    @Override
    public void notify(String message) {
        for (Observer o: observers) {
            o.update();
        }

    }
}

Observer代码示例

public interface Observer {
    void update();
}

ConcreteObserver代码示例

public class ConcreteObserver implements Observer {
    @Override
    public void update() {
        System.out.println("I am notified!");
    }
}

调用示例

 public static void main(String[] args) {
        ConcreteSubject subject = new ConcreteSubject();

        Observer observer = new ConcreteObserver();


        subject.attach(observer);

        // 通知已经订阅的员工
        subject.notify("boss is coming!");
    }

运行结果

I am notified!

2.3 优缺点

3 适用场景

4 总结


参考书籍及文章
1.《Java与模式》,电子工业出版社,阎宏
2.《Head First 设计模式(中文版)》,中国电力出版社

  1. 《大话设计模式》,清华大学出版社,程杰 4. 《设计模式——可复用面向对象软件的基础》,机械工业出版社,Erich Gamma,Richard Helm,Ralph Johnson,John Vlissides
  2. 《设计模式(五)观察者模式》,https://blog.csdn.net/itachi85/article/details/50773358
  3. 《观察者模式》,https://www.cnblogs.com/mingmingcome/p/10600576.html
上一篇 下一篇

猜你喜欢

热点阅读