python 設計模式之中介者模式

#先囉嗦一下

至少半個多月的樣子沒寫博客了,月初去了趟黃山,賞了美景,天然沒時間也沒條件敲博客了,一個多星期就這麼過去了。返回深圳後,工做積壓了一堆,而後白天就快馬加鞭的忙工做,晚上回家伺候小娃,又想早點休息,那是沒時間開機的。大頭小頭的工做也忙了一輪,第二輪還沒開始,這點空隙就是珍貴的博客時間。作it這個行業,不論是開發仍是測試,都不敢怠慢,知識更新太快,因此幾天不學,內心就發慌。咱們能靠的人很少,選擇靠本身是最靠譜的事。因此有點時間我就寫博客。python

 

#爲何要用中介者模式

假設如今科技發達以後,家裏全部設備都是智能化的。測試

而小明在家洗澡的時候有個習慣就是喜歡聽歌,並且洗澡時候還要把窗簾拉上。.net

所以就有這種情形,小明要拉窗簾可能就是要洗澡,固然也要聽歌。設計

所以咱們但願小明家的洗浴設備,音響設備和窗簾設備都能協同合做,無論操做哪一種設備,其餘兩種設備都有必定響應。code

以此寫出程序。
orm

 

這個程序最主要的功能就是在 一個類裏完成了對另外兩個類的方法做用。對象

可是這樣設計有兩個主要缺陷(實際上是對象之間耦合度太高而引發的)一旦窗簾設備壞掉,須要更換,那樣咱們就要讓新的窗簾設備創建別的設備的鏈接,這樣會很麻煩blog

若是咱們又有別的需求,好比洗澡的時候要把門鎖住,那門鎖的智能設備又要關聯全部設備,更加麻煩。ip


引入中介者
中介者模式的引入則極大的彌補了上述程序的兩個缺陷,對象交互以下圖開發

 



其實中介者就比如智能家居的管家,這樣全部對象的交互指令都經過它來傳達,這樣這個中介者負責與對象之間聯繫,對象與對象之間再也不進行直接的交互,也就是對對象關係 進行解耦。

 

 #中介者模式(Mediator)定義

用一箇中介對象來封裝一系列的對象交互中介者使得=各對象不須要顯示的相互引用,從而使其鬆耦合,並且能夠獨立地改變他們之間的交互。



#中介者模式涉及角色

 

#中介者模式應用場景

當有多個對象彼此間相互交互的時候,天然就會想到對象間的耦合度太高,解決辦法就是封裝對象間的交互行爲,所以就能想到中介者模式就是幹這行的。

 

#中介者模式優勢

 經過讓對象彼此解耦,增長對象的複用性
經過將控制邏輯集中,能夠簡化系統維護
經過中介者使一對所變成了一堆一,便於理解

 

#中介者模式缺點

若是涉及很差,引入中介者會使程序變的複雜
中介者承擔過多責任,是中心化模式,若中介者出現了問題,整個系統將會崩潰

 

 

#中介者模式結構圖

 

 

 

#舉個栗子

#抽象中介者
class Mediator:
    def __init__(self,comp,name):
        self.name=name
        self.comp=comp
        
    def send(self,message,clooeague):
        pass


#抽象同事類
class Colleague:
    mediator=None
    def __init__(self,mediator):
        self.mediator=mediator

         
#具體同事類1
class ConcreteColleagueA(Colleague): #房東
    def zhaozu(mediator,name,address,area,price):
        fdm='你好,我是房東{0},個人房子在{1},面積是{2},租金是{3}'.format(name,address,area,price)
        return fdm
    
#具體同事類1
class ConcreteColleagueB(Colleague): #租客
    def qiuzu(mediator,name,address,area,price):
        zkm='你好,我是租客{0},個人想租的房子大概在{1},面積大概是{2},租金大概是{3}'.format(name,address,area,price)
        return zkm
                                                                        
    
#具體中介類              
class ConcreteMediator(Mediator):
    fd=''
    zk=''

    def introSelf(self,comp,name):        
        print('您好,我是{0}公司的{1},之後我來爲您找到合適的房子或合適的租客'.format(comp,name))
        print('=========================')
  
    def __init__(self,name):
        self.name=name

    def Send(self,name,message):
        if self.name=='fd':
            print('房東你好,已收到你的放租消息,我立刻聯繫租客')
            print('zk 你好,房東的消息是: %s' % message)         
        else:
            print('租客你好,已收到你的求租消息,我立刻聯繫房東')
            print('fd 你好,租客的消息是: %s' % message)

if __name__=='__main__':
    mediator=ConcreteMediator('fd')
    mediator.introSelf('zy','xf')
    c1=ConcreteColleagueA
    fdmm=c1.zhaozu('xf','fd','nanshan','80','7000')
    mediator.Send('fd',fdmm)
    print('=========================')
    
    mediator=ConcreteMediator('zk')
    c2=ConcreteColleagueB
    zkmm=c2.qiuzu('xf','zk','nanshan','70','6000')
    mediator.Send('zk',zkmm)

 

 

 

 

參考

https://blog.csdn.net/zhen921/article/details/82316707

https://blog.csdn.net/jdhellfire/article/details/91357619

https://blog.csdn.net/M_azed/article/details/91995863

 https://blog.csdn.net/ponder008/article/details/6912119?ABstrategy=codes_snippets_optimize_v4

相關文章
相關標籤/搜索