观察者模式

Posted zchok

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了观察者模式相关的知识,希望对你有一定的参考价值。

概述  当对象间存在一对多关系时,则使用观察者模式(Observer Pattern)。比如,当一个对象被修改时,则会自动通知它的依赖对象。观察者模式属于行为型模式。

使用场景

  • 一个抽象模型有两个方面,其中一个方面依赖于另一个方面。将这些方面封装在独立的对象中使它们可以各自独立地改变和复用。
  • 一个对象的改变将导致其他一个或多个对象也发生改变,而不知道具体有多少对象将发生改变,可以降低对象之间的耦合度。
  • 一个对象必须通知其他对象,而并不知道这些对象是谁。
  • 需要在系统中创建一个触发链,A对象的行为将影响B对象,B对象的行为将影响C对象……,可以使用观察者模式创建一种链式触发机制。

使用

  java.util包中提供了Observable类和Observer接口,其中要求,被观察者需要继承Observable类,观察则需要实现Observer接口

举例

  定义华为p30为被观察者,并继承Observable类

 1 /**
 2  * @Author zch
 3  * @Date 2019/8/20
 4  */
 5 
 6 import java.util.Observable;
 7 
 8 /**
 9  * 定义华为手机:观察者
10  */
11 public class HuaWeiP30 extends Observable 
12 
13     //手机价格
14     private double money;
15 
16     public HuaWeiP30(double money) 
17         this.money = money;
18     
19 
20     public void setMoney(double money) 
21         if(money != this.money)
22             setChanged();   //价格改变
23         
24         if(money < this.money)
25             this.notifyObservers(); //通知观察者
26         
27         this.money = money;
28     
29 
30     @Override
31     public String toString() 
32         return "当前华为手机P30价格:" + money + "元";
33     
34 

 

定义华为粉丝为观察者,并实现Observer接口,并重写update(Observable o, Object arg)方法。

当观察者发现p30降价时,通知华为粉丝,提醒购买。

 1 /**
 2  * 华为粉丝:观察者
 3  */
 4 public class HuaWeiFan implements Observer 
 5 
 6     private String name;
 7 
 8     public HuaWeiFan(String name) 
 9         this.name = name;
10     
11 
12     /**
13      *
14      * @param o:被观察者对象
15      * @param arg:传递给观察者的参数
16      */
17     public void update(Observable o, Object arg) 
18         if(o instanceof HuaWeiP30)
19             System.out.println("粉丝名为" + name + "发现华为p30降价了,新的价格为:" + arg +"元,开始购买。");
20         
21     
22 

 

测试

 

 1 public class App 
 2 
 3     public static void main(String[] args) 
 4         HuaWeiP30 p = new HuaWeiP30(5000);
 5 
 6         HuaWeiFan A = new HuaWeiFan("A");
 7         HuaWeiFan B = new HuaWeiFan("B");
 8         HuaWeiFan C = new HuaWeiFan("C");
 9         HuaWeiFan D = new HuaWeiFan("D");
10 
11         p.addObserver(A);
12         p.addObserver(B);
13         p.addObserver(C);
14 
15         System.out.println(p);
16         p.setMoney(4000);
17         System.out.println(p);
18     
19 

测试结果

当前华为手机P30价格:5000.0元
粉丝名为C发现华为p30降价了,新的价格为:4000.0元,开始购买。
粉丝名为B发现华为p30降价了,新的价格为:4000.0元,开始购买。
粉丝名为A发现华为p30降价了,新的价格为:4000.0元,开始购买。
当前华为手机P30价格:4000.0元

 

 

 

 

以上是关于观察者模式的主要内容,如果未能解决你的问题,请参考以下文章

观察者模式是啥

观察者模式

设计模式之观察者模式

Android开发模式之观察者模式

[设计模式]观察者模式与订阅模式

设计模式-行为型模式-观察者模式