中介者.png
思想:使程序結構更清晰泪勒。將兩兩互相引用的繁雜高耦合的關系,使用中介者雀瓢,各自與中介者產(chǎn)生關系,降低耦合玉掸。
意圖:
用一個中介對象來封裝一系列的對象交互刃麸。中介者使各對象不需要顯式地相互引用,從而使其耦合松散司浪,而且可以獨立地改變它們之間的交互泊业。
適用性:
一組對象以定義良好但是復雜的方式進行通信。產(chǎn)生的相互依賴關系結構混亂且難以理解断傲。
一個對象引用其他很多對象并且直接與這些對象通信,導致難以復用該對象脱吱。
想定制一個分布在多個類中的行為智政,而又不想生成太多的子類认罩。
案例一:
"""
應用場景:一組已經(jīng)定義良好但是用復雜的方式進行通信,以及想定制一個分布在多個類中的行為,又不想生成太多子類的場合
(中介者降低交互者的耦合度,并且把交互的中心放在了中介者的身上,站在更宏觀的角度上看待系統(tǒng))
"""
# 抽象中介者類
class Metiator(object):
def send(self,message,concreteobj):
pass
# 具體中介者類——聯(lián)合國
class United(Metiator):
def __init__(self):
self.country1 = ""
self.country2 = ""
def send(self,message,concreteobj):
if self.country1 == concreteobj:
self.country2.get_message(message)
elif self.country2 == concreteobj:
self.country1.get_message(message)
else:
print '沒有對象'
# 抽象交互類
class Country(object):
def __init__(self):
self.metiator = ""
def bind(self,metiator):
self.metiator = metiator
# 具體交互類——中國
class China(Country):
def send(self, message):
self.metiator.send(message,self)
def get_message(self,message):
print "中國獲取對方消息:",message
# 具體交互類——某國
class Stick(Country):
def send(self, message):
self.metiator.send(message,self)
def get_message(self,message):
print "棒子獲取對方消息:",message
if __name__ == "__main__":
# 創(chuàng)建中介者,具體的交互者
united = United()
china = China()
stick = Stick()
# 交互者綁定交互的中介者
china.bind(united)
stick.bind(united)
united.country1 = china
united.country2 = stick
#開始交互
china.send('棒子,別部署薩德,揍你哦')
stick.send('哥,我錯了,不部署了')