觀察者模式(行為型)

2021-10-22 18:57:46 字數 3969 閱讀 8622

1.1定義

觀察者模式:定義物件之間的一種一對多依賴關係,使得每當乙個物件狀態發生改變時,其相關依賴物件都得到通知並被自動更新。

觀察者模式的定義說明:

1.2角色

觀察者模式包含以下4個角色:

1.3優點

1.4缺點

1.5適用環境

1.6教學例子

(1)分析

軟體系統:乙個物件的狀態或行為的變化將導致其他物件的狀態或行為也發生改變,它們之間將產生聯動

通過例子了解觀察者模式:

(2)類圖

(3)**

subject(目標)

public abstract class trafficsign 

//刪除觀察者

public void dettach(trafficjoiner joiner)

//通知觀察者

public void notify(int flag));

} //綠燈時候

if(flag == 1));

} }//放行的抽象方法

public abstract void pass();

//禁行的抽象方法

public abstract void noentry();

}

concretesubject(具體目標)

public class trafficlight extends trafficsign 

@override

public void noentry()

}

observer(觀察者)

public inte***ce trafficjoiner
concreteobserver(具體觀察者)

public class bus implements trafficjoiner 

@override

public void start()

@override

public void stop()

}

client(客戶端)

public class client 

}

1.7複雜觀察者模式

(1)問題:

在某多人聯機對戰遊戲中,多個玩家可以加入同一戰隊組成聯盟,當戰隊中的某一成員受到敵人攻擊時將給所有其他盟友傳送通知,盟友收到通知後將做出響應。

現使用觀察者模式設計並實現該過程,以實現戰隊成員之間的聯動。

(2)分析及類圖:

concretesubject(具體目標)

public class allycontrolcenter 

public void addmember(member m)

public void detachmember(member m)

public void receivealarm(member m)

public void notifymember(member m)

});}}

observer(觀察者)

public abstract class member 

public void setaddress(string address)

public member(string name,string address)

public abstract void help(member m);

public abstract void beattacked();

}

concreteobserver(具體觀察者)

public class player extends member

@override

public void help(member m)

@override

public void beattacked()

}

client(客戶端)

public class client 

}

1.8實操案例

(1)問題

某公司要開發一套機房監控系統,裡面包含很多的感測裝置。如:機房達到某一指定溫度,感測器將做出反應,將訊號傳遞給響應裝置,如警示燈閃爍、報警器將發出警報,安全逃生門將自動開啟、隔熱門將自動關閉等,每一種響應裝置的行為由它自己的程式來控制。系統設計時需要考慮將來引入新型別的感測裝置和相應裝置等。選用合適的設計模式來設計該系統,並畫出類圖後模擬實現。

(2)類圖

(3)**

observer(觀察者)

public inte***ce equipment
concreteobserver(具體觀察者)

public class warninglight implements equipment 

@override

public void move()

}

public class warningdevice implements equipment 

@override

public void move()

}

public class insulateddoor implements equipment 

@override

public void move()

}

public class escapedoor implements equipment 

@override

public void move()

}

subject(目標)

public abstract class sensor 

public void removeequipment(equipment e)

public void condition(boolean bool));

}else);

} }public abstract void show(float tp);

}

concretesubject(具體目標)

public class temperature extends sensor else

}}

client(客戶端)

public class client 

}

行為型 觀察者模式(Observer)

觀察者模式 observer pattern 定義物件之間的一種一對多依賴關係,使得每當乙個物件狀態發生改變時,其相關依賴物件皆得到通知並被自動更新。觀察者模式的別名包括發布 訂閱 publish subscribe 模式 模型 檢視 model view 模式 源 source listener ...

行為型設計模式 觀察者模式

觀察者模式定義一種一對多的依賴關係,讓多個觀察者物件同時監聽某一種主題物件,這個主題物件在狀態發生變化時,會通知所有觀察者物件,使他們能夠自動更新。也就是說乙個類物件可以有多個監聽,當某乙個屬性或者方法發生變化,對應的多個監聽就被觸發,執行各自方法,實現更新。解決思路 定義乙個觀察者模式介面,其實現...

觀察者模式 行為

當物件間存在一對多關係時,則使用觀察者模式 observer pattern 比如,當乙個物件被修改時,則會自動通知依賴它的物件。觀察者模式屬於行為型模式。意圖 定義物件間的一種一對多的依賴關係,當乙個物件的狀態發生改變時,所有依賴於它的物件都得到通知並被自動更新。主要解決 乙個物件狀態改變給其他物...