python 設計模式之中介者模式

2022-03-15 13:12:00 字數 3134 閱讀 3110

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

假設現在科技發達之後,家裡所有裝置都是智慧型化的。

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

因此就有這種情形,小明要拉窗簾可能就是要洗澡,當然也要聽歌。

因此我們希望小明家的洗浴裝置,音響裝置和窗簾裝置都能協同合作,不管操作哪種裝置,其他兩種裝置都有一定響應。

以此寫出程式。

這個程式最主要的功能就是在 乙個類裡完成了對另外兩個類的方法作用。

但是這樣設計有兩個主要缺陷(其實是物件之間耦合度過高而引起的)一旦窗簾裝置壞掉,需要更換,那樣我們就要讓新的窗簾裝置建立別的裝置的連線,這樣會很麻煩

如果我們又有別的需求,比如洗澡的時候要把門鎖住,那門鎖的智慧型裝置又要關聯所有裝置,更加麻煩。

引入中介者

中介者模式的引入則極大的彌補了上述程式的兩個缺陷,物件互動如下圖

其實中介者就好比智慧型家居的管家,這樣所有物件的互動指令都通過它來傳達,這樣這個中介者負責與物件之間聯絡,物件與物件之間不再進行直接的互動,也就是對物件關係 進行解耦。

#中介者模式(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='你好,我是房東,我的房子在,面積是,租金是'.format(name,address,area,price)

return fdm

#具體同事類1

class concretecolleagueb(colleague): #租客

def qiuzu(mediator,name,address,area,price):

zkm='你好,我是租客,我的想租的房子大概在,面積大概是,租金大概是'.format(name,address,area,price)

return zkm

#具體中介類

class concretemediator(mediator):

fd=''

zk=''

def introself(self,comp,name):

print('您好,我是公司的,以後我來為您找到合適的房子或合適的租客'.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)

參考

設計模式之中介者模式

1 抽象中介者,mediator 抽象中介 author jin.li public abstract class mediator2 具體的中介者,主機板 主機板中介 author jin.li public class mainboard extends mediator if colleagu...

設計模式之中介者模式

中介者模式 假如沒有總經理,下面六個個部門,財務部 市場部 研發部,財務部要發工資,讓大家核對公司需要跟市場部和研發部都通氣,市場部要接個新專案,需要研發部門處理技術,需要財務部出資金,市場部跟各個部門打交道,雖然只有六個個部門,但是關係非常亂 實際上,公司有總經理,各個部門有什麼事情都通報給總結裡...

設計模式之中介者模式

嘮叨幾句 設計模式的案例我已經寫過大部分的案例,但是本人沒有經常寫部落格的習慣,最近在將本人之前在碼雲上的案例直接搬過來 個人感覺容易和外觀模式弄混,所以在這裡做下簡單的比較 外觀模式 本質封裝互動,組合呼叫。就是向外部提供一組功能,但是具體的實現比較複雜,內部有喝多的元件相互組合呼叫,強調的是外觀...