观察者模式的定义:
定义对象间的一种一对多的依赖关系。到一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。
现在很多的购房者都在关注着房子的价格变化,每当房子价格变化的时候,所有的购房者都可以观察得到。
实际上以上的购房者都属于观察者,他们都在关注着房子的价格。
[java]view plaincopy
- packagecom.itmyhome;importjava.util.Observable;importjava.util.Observer;classHouseextendsObservable{//表示房子可以被观察privatefloatprice;//房子价格publicHouse(floatprice){this.price=price;}publicfloatgetPrice(){returnprice;}publicvoidsetPrice(floatprice){this.price=price;this.setChanged();//每一次修改的时候都应该引起观察者的注意this.notifyObservers(this.price);//价格改变通知观察者}}classPersonimplementsObserver{privateStringname;publicPerson(Stringname){//设置每一个观察者的名字this.name=name;}//Observer接口提供的方法 //当House对象的setPrice()调用后这个函数会被执行,相当于notifyObservers函数发送了一个组播publicvoidupdate(Observableo,Objectarg){System.out.println(this.name+",观察到价格更改为:"+arg);}publicStringgetName(){returnname;}publicvoidsetName(Stringname){this.name=name;}}publicclassObserverTest{/***@paramargs*/publicstaticvoidmain(String[]args){//TODOAuto-generatedmethodstubHouseh=newHouse(1000000);//创建观察者Personp1=newPerson("购房者A");Personp2=newPerson("购房者B");Personp3=newPerson("购房者C");h.addObserver(p1);h.addObserver(p2);h.addObserver(p3);h.setPrice(100);//房子价格改变由100万变成了100虽然这只是一个梦想!}}
输出结果为:
[java]view plaincopy
- 购房者C,观察到价格更改为:100.0购房者B,观察到价格更改为:100.0购房者A,观察到价格更改为:100.0
好好的管教你自己,不要管别人。