您好,登錄后才能下訂單哦!
這篇文章主要介紹了web中介者模式中的類怎么用的相關(guān)知識,內(nèi)容詳細易懂,操作簡單快捷,具有一定借鑒價值,相信大家閱讀完這篇web中介者模式中的類怎么用文章都會有所收獲,下面我們一起來看看吧。
效果
使用中介者模式可以:
有利于提煉可復(fù)用的共通功能。所有的同事類只需要和處于信息交換中心的中介者類進行交互,而不需要知道其他控件的存在。這樣既減少了溝通渠道,又降低了同事類之間的耦合性。
業(yè)務(wù)邏輯容易理解。終結(jié)者類作為信息交換的中心,同時也是信息處理的中心。由于所有和業(yè)務(wù)邏輯相關(guān)的內(nèi)容都集中在一處,理解和維護都變得很容易。
由于中介者類吸收了全部業(yè)務(wù)邏輯,所以同事類可以將注意力完全集中在自身功能上,由此產(chǎn)生的一個效果就是同事類可以很容易地實現(xiàn)可復(fù)用。
代碼示例
示例代碼基本上參照模式類圖編寫,為了便于理解,類名略有變更。首先是抽象中介者類。
class Mediator(metaclass=abc.ABCMeta): @abc.abstractmethod def notify(self, colleague): raiseNotImplementedError
這里使用類似觀察者模式的通知方式以獲得最大限度的靈活性。接下來是抽象同事類。
class Colleague: def __init__(self,mediator): self.mediator= mediator
抽象同事類管理一個中介者類的對象,用于發(fā)起和對象類之間的通信。
class TextEntry(Colleague): def __init__(self,mediator): Colleague.__init__(self, mediator) self.text= "" def set_text(self, text): self.text= text print('TextEntry:', self.text)class ListBox(Colleague): def __init__(self,mediator): Colleague.__init__(self, mediator) self.index= 0 defitem_selected(self): self.index= self.index + 1 self.mediator.notify(self) def get_selected(self): returnself.index
示例代碼唯一的功能就是在ListBox當前選項發(fā)生變化時,將選項索引表示在TextEntry中,因此實現(xiàn)的方法也僅限于該功能必須的部分。
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函數(shù)中首先構(gòu)建一個具象中介者類ConcreteMediator類的實例。在初始化處理中,ConcreteMediator以自身為參數(shù)構(gòu)建ListBox類和TextEntry類的對象。這一步完成后,所有的準備工作就算就緒了。
接下來是通過中介者類ConcreteMedator的test調(diào)用ListBox的item_selected方法。在實際的開發(fā)中這個調(diào)用應(yīng)該是發(fā)端于由于某個用戶操作。在ListBox的item_selected方法中,ListBox首先根據(jù)內(nèi)部邏輯決定自己的當前活動項,然后調(diào)用抽象中介者類的通知接口notify報告自己的變化。
中介者類處于信息交換的中心,接收來自動作控件的信息經(jīng)過處理后再將處理結(jié)果發(fā)送給必要的接收者。具體到示例代碼,Mediator類將只是簡單地活動項的索引設(shè)置到TextEntry上。
關(guān)于“web中介者模式中的類怎么用”這篇文章的內(nèi)容就介紹到這里,感謝各位的閱讀!相信大家對“web中介者模式中的類怎么用”知識都有一定的了解,大家如果還想學(xué)習更多知識,歡迎關(guān)注億速云行業(yè)資訊頻道。
免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。