Aha!設計模式 92 中介者模式 4)

2021-09-24 13:01:46 字數 2268 閱讀 1254

效果

使用中介者模式可以:

有利於提煉可復用的共通功能。所有的同事類只需要和處於資訊交換中心的中介者類進行互動,而不需要知道其他控制項的存在。這樣既減少了溝通渠道,又降低了同事類之間的耦合性。

業務邏輯容易理解。終結者類作為資訊交換的中心,同時也是資訊處理的中心。由於所有和業務邏輯相關的內容都集中在一處,理解和維護都變得很容易。

由於中介者類吸收了全部業務邏輯,所以同事類可以將注意力完全集中在自身功能上,由此產生的乙個效果就是同事類可以很容易地實現可復用。

**示例

示例**基本上參照模式類圖編寫,為了便於理解,類名略有變更。首先是抽象中介者類。

class mediator(metaclass=abc.abcmeta):@abc.abstractmethoddef notify(self, colleague):raisenotimplementederror
這裡使用類似觀察者模式的通知方式以獲得最大限度的靈活性。接下來是抽象同事類。

class colleague:def __init__(self,mediator):self.mediator= mediator
抽象同事類管理乙個中介者類的物件,用於發起和物件類之間的通訊。

class textentry(colleague):def __init__(self,mediator):colleague.__init__(self, mediator)self.text= ""def set_text(self, text):self.text= textprint('textentry:', self.text)class listbox(colleague):def __init__(self,mediator):colleague.__init__(self, mediator)self.index= 0defitem_selected(self):self.index= self.index + 1self.mediator.notify(self)def get_selected(self):returnself.index
示例**唯一的功能就是在listbox當前選項發生變化時,將選項索引表示在textentry中,因此實現的方法也僅限於該功能必須的部分。

class concretemediator(mediator):def __init__(self):self.lb= listbox(self)self.te= textentry(self)def notify(self, colleague):if colleague== self.lb:self.te.set_text(self.lb.get_selected())def test(self):self.lb.item_selected()if __name__ == '__main__':mediator = concretemediator()mediator.test()
main函式中首先構建乙個具象中介者類concretemediator類的例項。在初始化處理中,concretemediator以自身為引數構建listbox類和textentry類的物件。這一步完成後,所有的準備工作就算就緒了。

接下來是通過中介者類concretemedator的test呼叫listbox的item_selected方法。在實際的開發中這個呼叫應該是發端於由於某個使用者操作。在listbox的item_selected方法中,listbox首先根據內部邏輯決定自己的當前活動項,然後呼叫抽象中介者類的通知介面notify報告自己的變化。

中介者類處於資訊交換的中心,接收來自動作控制項的資訊經過處理後再將處理結果傳送給必要的接收者。具體到示例**,mediator類將只是簡單地活動項的索引設定到textentry上。

Aha!設計模式 91 中介者模式 3)

結構 中介者模式的想法是當多個物件為了同乙個目的需要相互協作時,指定乙個中介物件作為業務的中樞,以降低各個物件之間的耦合程度,其結構如下 參與者 mediator 抽象中介者類 中介者類mediator可以定義介面用於與各同事 colleague 物件之間通訊。之所以說是可以,是因為定義乙個對將來也...

設計模式 21 中介者模式

中介者模式 用乙個中介物件來封裝一系列的物件互動 中介者 就像我們在租房子一樣,有租房子的中介 抽象中介者 mediator package com.actionpattern.intermediary.edition1 抽象中介者 mediator public abstract class me...

設計模式17 中介者模式

中介者模式 mediator pattern 是用來降低多個物件和類之間的通訊複雜性。這種模式提供了乙個中介類,該類通常處理不同類之間的通訊,並支援松耦合,使 易於維護。中介者模式屬於行為型模式。不應當在職責混亂的時候使用。建立中介類 聊天室,負責傳送通訊 include include inclu...