观察者模式

1、定义被观察类,继承Observable

 1 public class Observed extends Observable{
 2     private Integer num;
 3 
 4     public Observed() {
 5         super();
 6     }
 7 
 8     public Observed(Integer num) {
 9         super();
10         this.num = num;
11     }
12 
13     public Integer getNum() {
14         return num;
15     }
16 
17     public void setNum(Integer num) {
18         super.setChanged();        //设置观察点
19         super.notifyObservers(num);  //通知所有观察者
20         this.num = num;
21     }
22 
23     @Override
24     public String toString() {
25         return "Observed [num=" + num + "]";
26     }
27 }

2、定义观察者,实现Observer接口

 1 public class NumberObserver implements Observer{
 2     private String name;
 3     
 4     public NumberObserver(String name) {
 5         super();
 6         this.name = name;
 7     }
 8 
 9     @Override
10     public void update(Observable o, Object arg) {
11         if(arg instanceof Integer) {
12             System.out.println(this.name + "观察到数量更新为:" + (Integer)arg);
13         }
14         
15     }
16 
17 }

3、测试

 1 public class TestObserver {
 2 
 3     public static void main(String[] args) {
 4         Observed o = new Observed(100);
 5         NumberObserver no1 = new NumberObserver("A");
 6         NumberObserver no2 = new NumberObserver("B");
 7         NumberObserver no3 = new NumberObserver("C");
 8         o.addObserver(no1);
 9         o.addObserver(no2);
10         o.addObserver(no3);
11         System.out.println(o);
12         o.setNum(666);
13         System.out.println(o);
14         
15     }
16 }
原文地址:https://www.cnblogs.com/archimedes-euler/p/11813152.html