观察者模式

简介: 定义:定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。优点:1.观察者和被观察者是抽象耦合的缺点:1.目标与观察者之间的依赖关系并没有完全解除,而且有可能出现循环引用。 2.当观察者对象很多时,通知的发布会花费很多时间,影响程序的效率。


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

优点:1.观察者和被观察者是抽象耦合的

缺点:1.目标与观察者之间的依赖关系并没有完全解除,而且有可能出现循环引用。

          2.当观察者对象很多时,通知的发布会花费很多时间,影响程序的效率。

使用场景:一个对象状态改变给其他对象通知的问题,而且要考虑到易用和低耦合,保证高度的协作。

原理:在抽象类里有一个 ArrayList 存放观察者们。

类图:image.png

栗子

观察者做出相应行为的方法的接口

1. 
2. public interface Observer {
3. 
4. void update(Observable o);
5. 
6. }

观察者的实现类

1. public class ConcreteObserver1 implements Observer{
2. 
3. public void update(Observable o) {
4. System.out.println("观察者1做出相应");
5.     }
6. 
7. }
1. public class ConcreteObserver2 implements Observer{
2. 
3. public void update(Observable o) {
4. System.out.println("观察者2做出相应");
5.     }
6. 
7. }

被观察者

1. public class Observable {
2. 
3.     List<Observer> observers = new ArrayList<Observer>();
4. 
5. public void addObserver(Observer o){
6.         observers.add(o);
7.     }
8. 
9. public void changed(){
10.         System.out.println("我是被观察者,我已经发生变化了");
11.         notifyObservers();//通知观察自己的所有观察者
12.     }
13. 
14. public void notifyObservers(){
15. for (Observer observer : observers) {
16.             observer.update(this);
17.         }
18.     }
19. }

调用

1. public class Client {
2. 
3. public static void main(String[] args) throws Exception {
4. Observable observable = new Observable();
5.         observable.addObserver(new ConcreteObserver1());
6.         observable.addObserver(new ConcreteObserver2());
7. 
8.         observable.changed();
9.     }
10. }

 


相关文章
|
6月前
|
设计模式 消息中间件 Java
观察者模式
观察者模式
52 1
|
6月前
|
C++
【C++】—— 观察者模式
【C++】—— 观察者模式
|
6月前
|
设计模式 JavaScript 开发者
详细讲解什么是观察者模式
详细讲解什么是观察者模式
|
关系型数据库 API
观察者模式解读
观察者模式解读
|
6月前
行为型 观察者模式(发布订阅)
行为型 观察者模式(发布订阅)
39 0
|
6月前
|
设计模式 Java
【观察者模式】 ——每天一点小知识
【观察者模式】 ——每天一点小知识
5 # 观察者模式
5 # 观察者模式
36 0
|
XML 设计模式 Java
观察者模式(下)
观察者模式(下)
61 0
|
设计模式
观察者模式(上)
观察者模式(上)
82 0
|
设计模式
我学会了,观察者模式
观察者模式属于行为型模式,这个类型的设计模式总结出了 类、对象之间的经典交互方式,将类、对象的行为和使用解耦了,花式的去使用对象的行为来完成特定场景下的功能。
130 0
我学会了,观察者模式