zoukankan      html  css  js  c++  java
  • 大话设计模式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/
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

  • 相关阅读:
    oracle中rownum和rowid的区别和用法
    jsp中,对window对象的简单总结
    下拉列表框实现二级联动
    window.showModalDialog()的简单用法
    javascript中的正则表达式
    java实现树型结构样式
    几个数据库的驱动、连接
    Java桌面程序中设置一个软件的系统托盘
    【动态规划】求两字符串连续最大公共子串长度
    大整数相乘
  • 原文地址:https://www.cnblogs.com/onepiece-andy/p/python-mediator-pattern.html
Copyright © 2011-2022 走看看