日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

设计模式系列漫谈之一 - 观察者模式

發布時間:2024/7/19 asp.net 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 设计模式系列漫谈之一 - 观察者模式 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

此文為轉載,地址: http://yuyijq.cnblogs.com/

故事

小雪是一個非常漂亮的女孩,漂亮的女孩總是有很多的追求者,而且追求者的隊伍在不斷的變動,隨時有人進入這個隊伍,也有人退出。男孩們追求女孩時總是表現120%的關心,當小雪私自游玩時總是不斷收到追求者詢問小雪位置變動的消息,小雪也不勝其煩,但小雪是如此的一個善良的女孩,她總是打斷自己正常的生活回復男孩們的消息。而男孩們由于要不斷的關心小雪的位置變化也弄的精疲力竭,而且還影響正常的工作。

小雪和男孩們的煩惱:

男孩們必須不斷的詢問小雪的位置變化,從而打斷正常的工作小雪也要不斷的接受男孩們的詢問,有的時候小雪的位置并沒有發生變化,還是要不斷的回復男孩們的詢問。如果給各個男孩們回復問題的方式都不盡相同,小雪還要知道不同的回復方式。

??? 我們給小雪和男孩們提出了解決方案:?
?????
??????建議小雪購買一款帶有GPRS功能的手機,該手機保存著所有追求者的電話號碼,當該手機檢測到小雪的位置發生變化時, 就會向所有追求者通知所在位置。這樣一來,男孩們和小雪都各自都可以按照自己正常的生活習慣,只有小雪所在位置發生變化時候才會進行通信。

觀察者模式(Observer)的解決方案

??? 觀察者模式的思想:觀察者模式定義了被觀察者與觀察者對象之間一對多關系,當被觀察者對象的狀態發生改變時,多個觀察者對象就會接受到通知。?

?觀察者接口如下:

namespace?XiaoXue
{
????
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);
????????????}
????????}
????????
//當位置發生變化時執行
????????public?void?OnAddressChanaged(string?newAddress)
????????{
????????????Notify(newAddress);
????????}
????}
}


客戶端調用如下:

BoyA?boya=new?BoyA();
BoyB?boyb
=new?BoyB();

GPRSMobile?mobile
=new?GRPSMobile()
mobile.AddBoy(boya);
mobile.AddBoy(boyb);

GPRS手機一旦監測所在位置發生變化,立即調用OnAddressChanaged方法發送信息
mobile.OnAddressChanaged("小雪在紐約向你問好!");

轉載于:https://www.cnblogs.com/ruochen/archive/2007/12/16/996706.html

總結

以上是生活随笔為你收集整理的设计模式系列漫谈之一 - 观察者模式的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。