二. 角色Observer(觀察者模式):定義對(duì)象間的一種一對(duì)多的依賴關(guān)系,以便當(dāng)一個(gè)對(duì)象的狀態(tài)發(fā)生改變時(shí),所有依賴于它的對(duì)象都得到通知并自動(dòng)刷新。
三. 實(shí)現(xiàn)抽象主題(Subject)角色:主題角色把所有對(duì)觀察者對(duì)象的引用保存在一個(gè)聚集里,每個(gè)主題都可以有任何數(shù)量的觀察者。抽象觀察者(Observer)角色:為所有的具體觀察者定義一個(gè)接口,在得到主題的通知時(shí)更新自己。具體主題(ConcreteSubject)角色:將有關(guān)狀態(tài)存入具體觀察者對(duì)象,在具體主題的內(nèi)部狀態(tài)改變時(shí),給所有登記過的觀察者發(fā)出通知。具體觀察者(ConcreteObserver)角色:存儲(chǔ)與主題的狀態(tài)自恰的狀態(tài)。
由于java提供了觀察者模式的實(shí)現(xiàn),這里就直接使用java的Api來實(shí)現(xiàn),這里模擬家長對(duì)孩子下達(dá)命令。Test.java
public class Test {public static void main(String[] args) {Mother m = new Mother();Children c1 = new Children(m);Children c2 = new Children(m);m.setInfo("死孩子,回家吃飯!");m.setInfo("快去寫作業(yè)!");m.setInfo("快去寫作業(yè)!");m.setInfo("快去睡覺 !");}}這里Mother是具體主題角色,Children是具體觀察者角色。Children.javapublic class Children implements Observer {public Children(Mother m){m.addObserver(this);}@Overridepublic void update(Observable o, Object arg) {String info = ((Mother)o).getInfo();System.out.println("已經(jīng)收到命令:" + info);}}實(shí)現(xiàn)了Observer接口,是具體觀察者角色。Mother.javapublic class Mother extends Observable {private String info = "";public String getInfo() {return info;}public void setInfo(String info) {if(!this.info.equals(info)){this.info = info;setChanged();}notifyObservers();}}繼承了Observalbe類,是具體主題角色。
聯(lián)系客服