观察者模式:
被观察的类:
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增加一个观察者对象per1 13 h.addObserver(per2); 14 h.addObserver(per3); 15 //让被观察者House对象house的发生变化 16 h.setPrice(60000.0f); 17 } 18 } 19 /* 20 打印的内容 21 房子****被观察的操作有变更....60000.0 22 房子****被观察的操作有变更....60000.0 23 房子****被观察的操作有变更....60000.0 24 */
原文:http://www.cnblogs.com/DreamDrive/p/4004529.html