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

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > asp.net >内容正文

asp.net

设计模式之中介者

發(fā)布時(shí)間:2023/12/4 asp.net 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 设计模式之中介者 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

中介者模式介紹

中介者模式

中介者模式是一種行為設(shè)計(jì)模式,能讓你減少對(duì)象之間混亂無(wú)序的依賴關(guān)系,該模式會(huì)限制對(duì)象之間的直接交互,迫使它們通過(guò)一個(gè)中介者對(duì)象進(jìn)行合作。

中介者模式顧名思義,可以用我們平時(shí)生活中的房產(chǎn)中介去理解。房產(chǎn)中介就是房子擁有者和想買房子人直接的橋梁,不讓二者直接交易,通過(guò)中介去做橋梁,進(jìn)行溝通和交易。

中介者模式建議你停止組件之間的直接交流并使其相互獨(dú)立。這些組件必須調(diào)用特殊的中介者對(duì)象,通過(guò)中介者對(duì)象重定向調(diào)用行為,以間接的方式進(jìn)行合作。最終,組件僅依賴于一個(gè)中介者類,無(wú)需與多個(gè)組件耦合。

類所擁有的依賴關(guān)系越少,就越易于修改、擴(kuò)展或復(fù)用。

可以為所有類型的對(duì)話框抽取通用接口,進(jìn)一步消弱其依賴性;接口中將聲明一個(gè)所有表單元素都能使用的通知方法,可用于將元素中發(fā)生的事件通知給對(duì)話框,所有實(shí)現(xiàn)了該接口的對(duì)話框都能使用這個(gè)提交按鈕。

中介者模式結(jié)構(gòu)

  • 1、組件

是包含業(yè)務(wù)邏輯的類。每一個(gè)組件都有一個(gè)指向中介者的引用,該引用被聲明為中介者接口類型。組件并不知道中介者所屬的類,這樣就可通過(guò)將其連接到不同的中介者使其能在其他程序中復(fù)用。

  • 2、中介者接口

聲明了與組件交流的方法,但通常僅包括一個(gè)通知方法。組件可將任意上下文(自身)作為該方法的參數(shù),只有這樣接收組件和發(fā)送者類之間才不會(huì)耦合。

  • 3、具體中介者

封裝了多種組件間的關(guān)系。具體中介者通常會(huì)保存所有組件的引用并對(duì)其進(jìn)行管理,甚至有時(shí)會(huì)對(duì)其生命周期進(jìn)行管理。

  • 4、通知邏輯

組件并不知道其他組件的情況。如果組件內(nèi)發(fā)生了重要事情,它只能通知中介者。中介者收到消息后能輕易地確定發(fā)送者,或許已足以去判斷接下來(lái)需要觸發(fā)的組件。

對(duì)于組件來(lái)說(shuō),中介者其實(shí)就是一個(gè)黑箱。發(fā)送者不知道最終會(huì)由誰(shuí)來(lái)處理自己的請(qǐng)求,接收者也不知道最初的誰(shuí)發(fā)出了請(qǐng)求。

適用場(chǎng)景

  • 1 ?當(dāng)某些對(duì)象和其他對(duì)象緊密耦合難以進(jìn)行修改時(shí)

  • 2 ?一個(gè)組件過(guò)于依賴其他組件而無(wú)法在不同應(yīng)用中復(fù)用時(shí)

  • 3 ?為了能在不同情景下復(fù)用一些基本行為,導(dǎo)致你需要被迫場(chǎng)景大量組件子類時(shí)

實(shí)現(xiàn)方式

  • 找到一組當(dāng)前緊密耦合的類且提供其獨(dú)立性能帶來(lái)更大好處的類。

  • 聲明中介者接口并描述中介者和各種組件之間所需的交流接口(一個(gè)接收組件的方法就夠了)。

  • 實(shí)現(xiàn)具體中介者類。

  • 讓中介者負(fù)責(zé)組件對(duì)象的創(chuàng)建和銷毀。

  • 組件必須保存對(duì)于中介對(duì)象的引用。

  • 修改組件代碼,使其可調(diào)用中介者的通知方法,而非其他組件的方法。然后將調(diào)用其他組件的代碼抽取到中介者類中,并在中介者接收到該組件通知時(shí)執(zhí)行這些代碼。

滿足單一職責(zé)、開(kāi)閉原則、減輕應(yīng)用中多個(gè)組件間的耦合情況、方便復(fù)用各個(gè)組件。

中介者將系統(tǒng)中組件的溝通行為中心化。各組件只知道中介者對(duì)象,無(wú)法直接相互交流。

中介者的主要目標(biāo)是消除一系列系統(tǒng)組件之間的相互依賴。這些組件將依賴于同一個(gè)中介者對(duì)象。

Demo

中介接口和房產(chǎn)鏈家

????///?<summary>///?房產(chǎn)中介接口///?</summary>public?interface?IHouseMediator?{void?Notify(object?sneder,string?ev);}///?<summary>///?鏈家???房產(chǎn)中介。實(shí)現(xiàn)房產(chǎn)中介接口///?</summary>class?LianJiaMediator?:IHouseMediator{private?TianJingHouse?_tjHouse;private?XianAnHouse?_xaHouse;????????public?LianJiaMediator(TianJingHouse?houseTj,?XianAnHouse?houseXa){????????????????????????this._tjHouse?=?houseTj;this._tjHouse.SetHouseMediator(this);this._xaHouse?=?houseXa;this._xaHouse.SetHouseMediator(this);}public?void?Notify(object?sneder,?string?ev){if?(ev?==?"FirstTJ"){Console.WriteLine("輸出......");this._xaHouse.SecondSell();}if?(ev?==?"SecondXA"){Console.WriteLine("輸出------");this._tjHouse.SecondSell();this._xaHouse.SecondSell();}}}

房子基類和 ?將售賣的房子

????///?<summary>///?房子基類///?</summary>class?BaseHouse?{protected?IHouseMediator?_houseMediator;public?BaseHouse(IHouseMediator?houseMediator=null){this._houseMediator?=?houseMediator;}public?void?SetHouseMediator(IHouseMediator?houseMediator)?{this._houseMediator?=?houseMediator;}}///?<summary>///?天津的房子///?</summary>class?TianJingHouse?:BaseHouse{public?void?FirstSell()?{Console.WriteLine("天津房子第一次出售");this._houseMediator.Notify(this,?"FirstTJ");}public?void?SecondSell(){Console.WriteLine("天津房子第二次出售");this._houseMediator.Notify(this,?"SecondTJ");}}///?<summary>///?西安的房子///?</summary>class?XianAnHouse?:?BaseHouse?{public?void?FirstSell(){Console.WriteLine("西安房子第一次出售");this._houseMediator.Notify(this,?"FirstXA");}public?void?SecondSell(){Console.WriteLine("西安房子第二次出售");this._houseMediator.Notify(this,?"SecondXA");}} ????class?Program{static?void?Main(string[]?args){TianJingHouse?tjHouse?=?new?TianJingHouse();XianAnHouse?xiHouse?=?new?XianAnHouse();new?LianJiaMediator(tjHouse,?xiHouse);Console.WriteLine("客戶端?執(zhí)行First?TJ");tjHouse.FirstSell();Console.ReadLine();Console.WriteLine("客戶端?執(zhí)行Second?XA");xiHouse.SecondSell();Console.ReadKey();}}

小寄語(yǔ)

人生短暫,我不想去追求自己看不見(jiàn)的,我只想抓住我能看的見(jiàn)的。

原創(chuàng)不易,給個(gè)關(guān)注。

我是阿輝,感謝您的閱讀,如果對(duì)你有幫助,麻煩關(guān)注、點(diǎn)贊、轉(zhuǎn)發(fā) 謝謝。

- END -

往期推薦

設(shè)計(jì)模式總覽

設(shè)計(jì)模式之簡(jiǎn)單工廠

設(shè)計(jì)模式之抽象工廠

設(shè)計(jì)模式之建造者

設(shè)計(jì)模式之原型

設(shè)計(jì)模式之單例

設(shè)計(jì)模式之適配器

設(shè)計(jì)模式之橋接

設(shè)計(jì)模式之組合

設(shè)計(jì)模式之裝飾器

設(shè)計(jì)模式之外觀

設(shè)計(jì)模式之享元

設(shè)計(jì)模式之代理

設(shè)計(jì)模式之責(zé)任鏈

設(shè)計(jì)模式之命令

設(shè)計(jì)模式之迭代器

總結(jié)

以上是生活随笔為你收集整理的设计模式之中介者的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。