设计模式系列漫谈之一 - 观察者模式
此文為轉載,地址: http://yuyijq.cnblogs.com/
故事
小雪是一個非常漂亮的女孩,漂亮的女孩總是有很多的追求者,而且追求者的隊伍在不斷的變動,隨時有人進入這個隊伍,也有人退出。男孩們追求女孩時總是表現(xiàn)出120%的關心,當小雪私自游玩時總是不斷收到追求者詢問小雪位置變動的消息,小雪也不勝其煩,但小雪是如此的一個善良的女孩,她總是打斷自己正常的生活回復男孩們的消息。而男孩們由于要不斷的關心小雪的位置變化也弄的精疲力竭,而且還影響正常的工作。
小雪和男孩們的煩惱:
男孩們必須不斷的詢問小雪的位置變化,從而打斷正常的工作小雪也要不斷的接受男孩們的詢問,有的時候小雪的位置并沒有發(fā)生變化,還是要不斷的回復男孩們的詢問。如果給各個男孩們回復問題的方式都不盡相同,小雪還要知道不同的回復方式。
??? 我們給小雪和男孩們提出了解決方案:?
?????
??????建議小雪購買一款帶有GPRS功能的手機,該手機保存著所有追求者的電話號碼,當該手機檢測到小雪的位置發(fā)生變化時, 就會向所有追求者通知所在位置。這樣一來,男孩們和小雪都各自都可以按照自己正常的生活習慣,只有小雪所在位置發(fā)生變化時候才會進行通信。
觀察者模式(Observer)的解決方案
??? 觀察者模式的思想:觀察者模式定義了被觀察者與觀察者對象之間一對多關系,當被觀察者對象的狀態(tài)發(fā)生改變時,多個觀察者對象就會接受到通知。?
?觀察者接口如下:
{
????public?interface?IObserver
????{
????????void?ShowAddress(string?address);
????}
}
觀察者類如下:
namespace?XiaoXue{
????public?class?BoyA?:?IObserver
????{
????????public?void?ShowAddress(string?address)
????????{
????????????Console.WriteLine("小雪所在位置:"?+?address);
????????}
????}
????public?class?BoyB?:?IObserver
????{
????????public?void?ShowAddress(string?address)
????????{
????????????Console.WriteLine("小雪所在位置:"?+?address);
????????}
????}
}
被觀察者類如下:
namespace?XiaoXue{
????public?class?GPRSMobile
????{
????????private?ArrayList?boys?=?new?ArrayList();?//觀察者列表?
????????public?GPRSMobile()
????????{
????????????
????????}
????????public?void?AddBoy(IObserver?b)
?????????{
??????????????boys.Add(b);
?????????}
????????//通知所有觀察者?
???????private?void?Notify(string?address)
????????{
????????????for?(int?i?=?0;?i?<?boys.Count;?i++)
????????????{
?????????????????IObserver?boy=(IObserver)boys[i];
?????????????????boy.ShowAddress(address);
????????????}
????????}
????????//當位置發(fā)生變化時執(zhí)行
????????public?void?OnAddressChanaged(string?newAddress)
????????{
????????????Notify(newAddress);
????????}
????}
}
客戶端調(diào)用如下:
BoyB?boyb=new?BoyB();
GPRSMobile?mobile=new?GRPSMobile()
mobile.AddBoy(boya);
mobile.AddBoy(boyb);
GPRS手機一旦監(jiān)測所在位置發(fā)生變化,立即調(diào)用OnAddressChanaged方法發(fā)送信息
mobile.OnAddressChanaged("小雪在紐約向你問好!");
轉載于:https://www.cnblogs.com/ruochen/archive/2007/12/16/996706.html
總結
以上是生活随笔為你收集整理的设计模式系列漫谈之一 - 观察者模式的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 一场关于Google不作恶信条的辩论会
- 下一篇: 于.net开发平台项目案例集锦