首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件开发 >

设计方式之观察者模式

2012-09-04 
设计模式之观察者模式1.什么是观察者模式(Observer)?观察者模式在java中是一个非常重要的设计模式。就像它

设计模式之观察者模式
1.什么是观察者模式(Observer)?
观察者模式在java中是一个非常重要的设计模式。就像它的名字一样,是用来观察事物的。被观察的对象被称为主题,观察主题的对象被称为观察者。

2.观察者模式用来解决哪些问题?
如果一个特定的对象的状态改变,随之对应的一组对象自动改变自己的状态。通过实现观察者模式来实现对象之间的耦合。

3.在java中怎么实现观察者模式?
在java中我们可以很容易的实现观察者模式。在java.util包中我们可以找到实现此模式的接口、类和方法。
Public Interface Observer
当主题改变时,任何实现此接口的对象将被通知。Update (Observable Ob, Object arg)方法被调用。
Class Observable:
观察者要观察的对象
一些重要的方法
addObserver(Observer o):为主题添加观察者
deleteObserver(Observer o):删除观察者
hasChanged():检查主题状态是不是改变
clearChanged():表示主题是否改变或者主题改变是否已经通知所有的观察者
notifyObservers(): 当主题改变时通知所有的观察者

你可以选择jdk提供的提供的类和接口或者自己写你的主题和观察者的接口,我更倾向于自己实现,应为这也不是很麻烦,而且比jdk提供的更为灵活

interface Observer{public void update(float intrest);}interface Subject{public void registerObserver(Observer observer);public void deleteObserver(Observer observer);public void notifyObervers();}import java.util.*;public class Loan implements Subject{private ArrayList<Observer> observers = new ArrayList<Observer>();private String type;private String bank;private float intrest;public Loan(String type,String bank,float intrest){this.type = type;this.bank = bank;this.intrest = intrest;}public float getIntrest(){return this.intrest;}public void setIntrest(float intrest){this.intrest = intrest;}public String getBank() {return this.bank;  }    public String getType() {  return this.type;  }    public void registerObserver(Observer observer){  observers.add(observer);  }    public void deleteObserver(Observer observer){  observers.remove(observer);  }public void notifyObervers(){for(Observer observer:observers){System.out.println("Notifying Observers on change in Loan interest");observer.update(this.intrest);}}}public class Newspaper implements Observer {       public void update(float interest) {              System.out.println("Newspaper: Interest Rate updated, new Rate is: "                           + interest);       }}public class Internet implements Observer {       public void update(float interest) {              System.out.println("Internet: Interest Rate updated, new Rate is: "                           + interest);       }}public class ObserverTest {       public static void main(String args[]) {              // this will maintain all loans information              Newspaper printMedia = new Newspaper();              Internet onlineMedia = new Internet();              Loan personalLoan = new Loan("Personal Loan","Standard Charterd",12.5f);              personalLoan.registerObserver(printMedia);              personalLoan.registerObserver(onlineMedia);              personalLoan.setIntrest(3.5f);personalLoan.notifyObervers();       }}

4.观察者模式的优点:
观察者模式的主要优点就是主题和观察者直接的松耦合。主题只需要知道观察者的一个列表,不用关心那些观察者是如何实现。主题通过广播的方式通知观察者
5.观察者模式的缺点
使debug变得困难
因为主题保持了所有观察者的引用,如果我们不删除观察者,有可能造成内存问题。

热点排行