中介者模式(Mediator Pattern):用一个对象来封装一系列的对象交互,中介者使各对象不需要显示地相互引用,从而使耦合松散,而且可以独立地改变它们之间的交互.

下面是一个中介者模式的demo:

 #!/usr/bin/env python
# -*- coding:utf-8 -*- __author__ = 'Andy'
"""
大话设计模式
设计模式——中介者模式
中介者模式(Mediator Pattern):用一个对象来封装一系列的对象交互,中介者使各对象不需要显示地相互引用,从而使耦合松散,而且可以独立地改变它们之间的交互.
应用场景:一组已经定义良好但是用复杂的方式进行通信,以及想定制一个分布在多个类中的行为,又不想生成太多子类的场合
(中介者降低交互者的耦合度,并且把交互的中心放在了中介者的身上,站在更宏观的角度上看待系统)
"""
# 抽象中介者类
class Metiator(object): def send(self,message,concreteobj):
pass # 具体中介者类——联合国
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__":
# 创建中介者,具体的交互者
united = United()
china = China()
stick = Stick()
# 交互者绑定交互的中介者
china.bind(united)
stick.bind(united) united.country1 = china
united.country2 = stick
#开始交互
china.send('棒子,别部署萨德,揍你哦')
stick.send('哥,我错了,不部署了')

上面类的设计如下图:

由于把对象如何协作进行了抽象,将中介作为一个独立的概念并将其封装在一个独立的对象中,这样关注的对象就从对象各自本身的行为转移到他们之间的交互上来,站在更宏观的角度看待系统。

由于United控制了集中化,于是把交互的复杂性变成了中介者的复杂性,这就使得中介者比任何一个Country都复杂

中介者模式一般用于一组对象以定义良好但是复杂的方式进行通信的场合,以及想定制一个分布在多个类中的行为,而又不想生成太多的子类的场合

作者:Andy
出处:http://www.cnblogs.com/onepiece-andy/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

大话设计模式Python实现-中介者模式的更多相关文章

  1. 大话设计模式Python实现- 享元模式

    享元模式(Flyweight Pattern):运用共享技术有效地支持大量细粒度的对象. 下面是一个享元模式的demo: #!/usr/bin/env python # -*- coding:utf- ...

  2. 大话设计模式Python实现-职责链模式

    职责链模式(Chain Of Responsibility):使多个对象都有机会处理请求,从而避免发送者和接收者的耦合关系.将对象连成链并沿着这条链传递请求直到被处理 下面是一个设计模式的demo: ...

  3. 大话设计模式Python实现- 抽象工厂模式

    抽象工厂模式(Abstract Factory Pattern):提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们的类 下面是一个抽象工厂的demo: #!/usr/bin/env pyth ...

  4. 大话设计模式Python实现-工厂方法模式

    工厂方法模式(Factory Method Pattern):定义一个用于创建对象的接口,让子类决定实例化哪一个类,工厂方法使一个类的实例化延时到其子类. #!/usr/bin/env python ...

  5. 大话设计模式Python实现-简单工厂模式

    简单工厂模式(Simple Factory Pattern):是通过专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类. 下面使用简单工厂模式实现一个简单的四则运算 #!/usr/ ...

  6. 大话设计模式C++版——抽象工厂模式

    前面说过,简单工厂模式是最基础的一种设计模式,那以工厂命名的设计模式就是23种设计模式中最多的一种,他们一脉相承,一步一步进化而来,这里就是其中的最后一种——抽象工厂模式(Abstract Facto ...

  7. 大话设计模式C++版——工厂方法模式

    工厂方法模式是以简单工厂模式为基础的,如果未了解简单工厂模式的同学可先浏览<大话设计模式C++版——简单工厂模式>.在简单工厂模式中,提到过简单工厂模式的缺陷,即违背了开发—封闭原则,其主 ...

  8. 【转】设计模式 ( 十五 ) 中介者模式Mediator(对象行为型)

    设计模式 ( 十五 ) 中介者模式Mediator(对象行为型) 1.概述 在面向对象的软件设计与开发过程中,根据"单一职责原则",我们应该尽量将对象细化,使其只负责或呈现单一的职 ...

  9. 设计模式 ( 十五 ) 中介者模式Mediator(对象行为型)

    设计模式 ( 十五 ) 中介者模式Mediator(对象行为型) 1.概述 在面向对象的软件设计与开发过程中,根据“单一职责原则”,我们应该尽量将对象细化,使其只负责或呈现单一的职责,即将行为分布到各 ...

随机推荐

  1. 12-Factor与微服务

           为了构建分布式微服务程序,能够部署到所有云服务,Heroku工程师总结所有云原生应用程序的12要素: 1.基准代码 Single codebase: The application mu ...

  2. shell编程之case分支语句

    shell编程之case分支语句 case分支语句和if的多分支语句很相似. if多分支语句一般用在有(区间范围)的地方 :例如:0-100之间. if需要判断多个不同的条件. case的分支语句用在 ...

  3. Struts2.0

    流程详解:   配置详解:   constant  (常用常量配置) 使用Struts2 框架 ,先要导入Struts2 需要的jar 包 , 通过配置中央控制器 以及web.xml 来实现  Str ...

  4. mybatis基础 笔记

    Mybatis依赖<!--测试--> <dependency>      <groupId>junit</groupId>      <artif ...

  5. Java之IO初识(字节流和字符流)

    IO概述 生活中,你肯定经历过这样的场景.当你编辑一个文本文件,忘记了 ctrl+s ,可能文件就白白编辑了.当你电脑上插入一个U盘,可以把一个视频,拷贝到你的电脑硬盘里.那么数据都是在哪些设备上的呢 ...

  6. C语言中,关于相除的问题

    若定义的类型是 整数型:int a,b ;则a/b的值为整数的,不会带着小数点的..... 若定义的数据类型是 浮点型的 :double a,b; 则这种情况下,得到的结果与数学结果无异

  7. Java入门总结

    1. 一个Java源码只能定义一个public类型的class,并且class名称和文件名要完全一致: 使用javac可以将.java源码编译成.class字节码: 使用java可以运行一个已编译的J ...

  8. python的pstuil模块总结

    import psutil print(dir(psutil)) # 查看逻辑cpu的个数 print(psutil.cpu_count()) # 查看物理cpu的个数 print(psutil.cp ...

  9. Java描述设计模式(11):观察者模式

    本文源码:GitHub·点这里 || GitEE·点这里 一.观察者模式 1.概念描述 观察者模式是对象的行为模式,又叫发布-订阅(Publish/Subscribe)模式.观察者模式定义了一种一对多 ...

  10. Spring Boot 2 快速教程:WebFlux 快速入门(二)

    摘要: 原创出处 https://www.bysocket.com 「公众号:泥瓦匠BYSocket 」欢迎关注和转载,保留摘要,谢谢! 02:WebFlux 快速入门实践 文章工程: JDK 1.8 ...