概念
观察者模式也被称为 Model-View模式。观察者的状态依赖于被观察者的行为。一旦被观察者的行为发生改变
观察者的状态也随之发生改变。是一种对象间的信息交互方式。
实现
- 类图
- Observer
1 |
|
- ConcreteObserver
1 |
|
- ConcreteObserver2
1 | package com.littlehui.design.observer; |
- Subject
1 |
|
- ConcreteSubject
1 | package com.littlehui.design.observer; |
Client
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23package com.littlehui.design.observer;
/**
* @Description TODO
* @ClassName Client
* @Author littlehui
* @Date 2019/10/9 16:42
* @Version 1.0
**/
public class Client {
public static void main(String[] args) {
Observer observer1 = new ConcreteObserver();
Observer observer2 = new ConcreteObserver2();
Subject subject = new ConcreteSubject();
subject.register(observer1);
subject.register(observer2);
subject.notify("呼叫司令。");
}
}执行
1 |
|
场景
观察者模式功能是用于信息广播。观察者在得到广播信息后进行一系列的状态变更。比如前端菜单面板的应用,面板上的
按钮,图标观察面板的状态。一旦面板发生关闭或者取消,面板上的按钮,图标随之也可能发生变更,比如取消或者重新绘制等等。
总结
观察者模式提供了一种对象设计,让主题和观察者之间耦合度降得很低,为什么呢?关于观察者的一切,主题只知道观察者实现了Observer接口,并不需要观察者具体的类是谁,做了什么或者其他细节.
这样的话,由于松耦合,改变主题或者观察者其中一方,并不会影响另一方,只要他们之间的接口仍被遵守,就可以自由地改变它.
降低对象之间的耦合度,也是面设对象设计的一个很重要的原则.