首页 > 代码库 > 观察者模式

观察者模式

观察者模式:

被观察的类:

 1 package cn.itcast.obserdemo; 2  3 import java.util.Observable; 4  5 //House是被观察的,这里直接继承java中的类库(API)Observable类 6 public class House extends Observable { 7     //给House类声明一个price属性 8     private float price; 9     10     public House(float price){11         this.price = price ;12     }13     public String toString(){14         return "房子";15     }16     public float getPrice(){17         return price;18     }19     20     public void setPrice(float price){21         super.setChanged();//通知内容已经被修改了22         this.price = price;23         //一旦修改,则表示价格改变,那么价格改变之后,实际上应该立即通知所有的观察者24         super.notifyObservers(price);//通知所有的观察者已经改变.25     }26 }

观察者类:

 1 package cn.itcast.obserdemo; 2  3 import java.util.Observable; 4 import java.util.Observer; 5  6 //人是观察者,实现Observer接口 7 public class Person implements Observer{ 8     //然后要实现Observer中的一个update()方法 9     public void update(Observable o, Object arg) {10         //为了看下update中的各个参数代表的是什么意思,打印这两个参数11         System.out.println(o + "****被观察的操作有变更...."+arg);12     }13 }

主测试类:

 1 package cn.itcast.obserdemo; 2  3 public class TestObserver { 4     public static void main(String[] args) { 5         //new 一个被观察者House 6         House h = new House(30000.0f); 7         //new 三个观察者Person 8         Person per1 = new Person(); 9         Person per2 = new Person();10         Person per3 = new Person();11         //被观察者和观察者之间建立"观察与被观察"关系12         h.addObserver(per1);//House对象h1增加一个观察者对象per113         h.addObserver(per2);14         h.addObserver(per3);15         //让被观察者House对象house的发生变化16         h.setPrice(60000.0f);17     }18 }19     /*20     打印的内容21     房子****被观察的操作有变更....60000.022     房子****被观察的操作有变更....60000.023     房子****被观察的操作有变更....60000.024     */

 

观察者模式