java学习之观察者设计模式

java学习之观察者设计模式

 1 package com.gh.observer;
 2 import java.util.Observable;
 3 /**
 4  * 被观察者对象
 5  * 必须继承被观察者抽象类
 6  * @author ganhang
 7  *
 8  */
 9 public class Doll extends Observable{
10     private int price;
11     
12     public int getPrice() {
13         return price;
14     }
15 
16     public void setPrice(int price) {
17         this.price = price;
18         this.setChanged();
19         this.notifyObservers();
20     }
21     
22 }
 1 package com.gh.observer;
 2 
 3 import java.util.Observable;
 4 import java.util.Observer;
 5 
 6 /**
 7  * 观察者对象
 8  * 必须实现观察者的接口
 9  * @author ganhang
10  *
11  */
12 public class Person implements Observer{
13     private String name;
14     
15     public Person(String name){
16         this.name=name;
17     }
18     public void update(Observable o, Object arg) {
19         if(o instanceof Doll){
20             Doll doll=(Doll) o;
21             System.out.println(name+"您关注的娃娃价格已经更新为"+doll.getPrice());
22         }
23     }
24 
25 }
package com.gh.observer;
/**
 * 观察者模式的测试
 * @author ganhang
 */
public class test {
    public static void main(String[] args) {
        Person p=new Person("小白");
        Person p1=new Person("小黑");
        Doll doll=new Doll();
        doll.addObserver(p);//将观察者添加到被观察者的集合中
        doll.addObserver(p1);
        System.out.println("第一轮促销");
        doll.setPrice(1999);
        System.out.println("第二轮促销");
        doll.deleteObserver(p1);
        doll.setPrice(999);
    }
}

输出

第一轮促销
小黑您关注的娃娃价格已经更新为1999
小白您关注的娃娃价格已经更新为1999
第二轮促销
小白您关注的娃娃价格已经更新为999