大话设计模式Python实现-中介者模式
中介者模式(Mediator Pattern):用一个对象来封装一系列的对象交互,中介者使各对象不需要显示地相互引用,从而使耦合松散,而且可以独立地改变它们之间的交互.
下面是一个中介者模式的demo:
1 #!/usr/bin/env python 2 # -*- coding:utf-8 -*- 3 4 __author__ = 'Andy' 5 """ 6 大话设计模式 7 设计模式——中介者模式 8 中介者模式(Mediator Pattern):用一个对象来封装一系列的对象交互,中介者使各对象不需要显示地相互引用,从而使耦合松散,而且可以独立地改变它们之间的交互. 9 应用场景:一组已经定义良好但是用复杂的方式进行通信,以及想定制一个分布在多个类中的行为,又不想生成太多子类的场合 10 (中介者降低交互者的耦合度,并且把交互的中心放在了中介者的身上,站在更宏观的角度上看待系统) 11 """ 12 # 抽象中介者类 13 class Metiator(object): 14 15 def send(self,message,concreteobj): 16 pass 17 18 # 具体中介者类——联合国 19 class United(Metiator): 20 21 def __init__(self): 22 self.country1 = "" 23 self.country2 = "" 24 25 def send(self,message,concreteobj): 26 if self.country1 == concreteobj: 27 self.country2.get_message(message) 28 elif self.country2 == concreteobj: 29 self.country1.get_message(message) 30 else: 31 print '没有对象' 32 # 抽象交互类 33 class Country(object): 34 35 def __init__(self): 36 self.metiator = "" 37 38 def bind(self,metiator): 39 self.metiator = metiator 40 41 # 具体交互类——中国 42 class China(Country): 43 44 def send(self, message): 45 self.metiator.send(message,self) 46 47 def get_message(self,message): 48 print "中国获取对方消息:",message 49 # 具体交互类——某国 50 class Stick(Country): 51 52 def send(self, message): 53 self.metiator.send(message,self) 54 55 def get_message(self,message): 56 print "棒子获取对方消息:",message 57 58 59 if __name__ == "__main__": 60 # 创建中介者,具体的交互者 61 united = United() 62 china = China() 63 stick = Stick() 64 # 交互者绑定交互的中介者 65 china.bind(united) 66 stick.bind(united) 67 68 united.country1 = china 69 united.country2 = stick 70 #开始交互 71 china.send('棒子,别部署萨德,揍你哦') 72 stick.send('哥,我错了,不部署了')
上面类的设计如下图:
由于把对象如何协作进行了抽象,将中介作为一个独立的概念并将其封装在一个独立的对象中,这样关注的对象就从对象各自本身的行为转移到他们之间的交互上来,站在更宏观的角度看待系统。
由于United控制了集中化,于是把交互的复杂性变成了中介者的复杂性,这就使得中介者比任何一个Country都复杂
中介者模式一般用于一组对象以定义良好但是复杂的方式进行通信的场合,以及想定制一个分布在多个类中的行为,而又不想生成太多的子类的场合
作者:Andy
出处:http://www.cnblogs.com/onepiece-andy/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。