Python设计模式-中介者模式

代码基于3.5.2,代码如下;

#coding:utf-8
#中介者模式class colleague():mediator = Nonedef __init__(self,mediator):self.mediator = mediatorclass purchaseColleague(colleague):def buyStuff(self,num):print("PURCHASE:Bought {0}".format(num))self.mediator.execute("buy",num)def getNotice(self,content):print("PURCHASE:Get Notice -- {0}".format(content))class warehoustColleague(colleague):total = 0threshold = 100def setThreshold(self,threshold):self.threshold = thresholddef isEnough(self):if self.total < self.threshold:print("WARNING:Warning ... Stock is low ..")self.mediator.execute("warning",self.total)return Falseelse:return Truedef inc(self,num):self.total += numprint("WAREHOUSE:Increase {0}".format(num))self.mediator.execute("increase",num)def dec(self,num):if num > self.total:print("WAREHOUSE:Error ... Stock is not enough")else:self.total -= numprint("WAREHOUSE:Decrease {0}".format(num))self.mediator.execute("decrease",num)self.isEnough()class salesColleague(colleague):def sellStuff(self,num):print("SALES:Sell {0}".format(num))self.mediator.execute("sell",num)def getNotice(self,content):print("SALES:Get Notice -- {0}".format(content))class abstractMediator():purchase = Nonesales = Nonewarehouse = Nonedef setPurchase(self,purchase):self.purchase = purchasedef setWarehouse(self,warehouse):self.warehouse = warehousedef setSales(self,sales):self.sales = salesdef execute(self,content,num):passclass stockMediator(abstractMediator):def execute(self,content,num):print("MEDIATOR:Get Info -- {0}".format(content))if content == "buy":self.warehouse.inc(num)self.sales.getNotice("Bought {0}".format(num))elif content == "increase":self.sales.getNotice("Inc {0}".format(num))self.purchase.getNotice("Inc {0}".format(num))elif content == "decrease":self.sales.getNotice("Dec {0}".format(num))self.purchase.getNotice("Dec {0}".format(num))elif content == "warning":self.sales.getNotice("Stock is low {0} left".format(num))self.purchase.getNotice("Stock is low. Please Buy More {0}".format(num))elif content == "sell":self.warehouse.dec(num)self.purchase.getNotice("Sold {0}".format(num))else:passif __name__ == "__main__":mobile_mediator = stockMediator()mobile_purchase = purchaseColleague(mobile_mediator)moblie_warehouse = warehoustColleague(mobile_mediator)moblie_sales = salesColleague(mobile_mediator)mobile_mediator.setPurchase(mobile_purchase)mobile_mediator.setWarehouse(moblie_warehouse)mobile_mediator.setSales(moblie_sales)moblie_warehouse.setThreshold(200)mobile_purchase.buyStuff(300)moblie_sales.sellStuff(120)

中介者模式分析与解读

中介者模式

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

代码解读

该例子基于的需求:销售一旦达成订单,销售人员会通过系统的销售子系统部分通知仓储子系统,仓储子系统会将可出仓手机数量减少,同时通知采购管理子系统当前销售订单;仓储子系统的库存到达阈值以下,会通知销售子系统和采购子系统,并督促采购子系统采购;采购完成后,采购人员会把采购信息填入采购子系统,采购子系统会通知销售子系统采购完成,并通知仓库子系统增加库存。
1、定义了colleague类,子系统都是通过继承该子类来实现,在该类初始化时,传入mediator者;
2、分别定义了purchaseColleague、warehoustColleague和salesColleague三个类,分别表示采购子系统,仓库子系统和销售子系统,在purchaseColleague中的buyStuff、salesColleague的sellStuff方法,都是在接收到请求处理时调用了mediator的方法处理;在warehoustColleague仓储子系统类中,每次调用inc,dec方法,都是先判断保存的total、threshold值是否在要求范围内,当total数量小于threshold时,会通过调用mediator来通知采购子系统,当total数量增加时,通知销售子系统仓储数量增加;
3、通过定义abstractMediator来保存三个子系统的实例,stockMediator通过继承abstractMediator类,实现execute方法,来实现三个子系统在调用过程中的逻辑处理,以此来完成通信。

代码运行结果如下:

PURCHASE:Bought 300
MEDIATOR:Get Info -- buy
WAREHOUSE:Increase 300
MEDIATOR:Get Info -- increase
SALES:Get Notice -- Inc 300
PURCHASE:Get Notice -- Inc 300
SALES:Get Notice -- Bought 300
SALES:Sell 120
MEDIATOR:Get Info -- sell
WAREHOUSE:Decrease 120
MEDIATOR:Get Info -- decrease
SALES:Get Notice -- Dec 120
PURCHASE:Get Notice -- Dec 120
WARNING:Warning ... Stock is low ..
MEDIATOR:Get Info -- warning
SALES:Get Notice -- Stock is low 180 left
PURCHASE:Get Notice -- Stock is low. Please Buy More 180
PURCHASE:Get Notice -- Sold 120

中介者模式应用场景:

1、设计类图时,出现了网状结构时,可以考虑将类图设计成星型结构,这样就可以实现中介模式;
2、适用于一组对象以定义良好但是复杂的方式进行通信的场合;
3、想定制一个分布在多个类中的行为,而又不想生成太多的子类的场合。

优缺点分析

优点

1、减少类与类的依赖,降低了类和类之间的耦合;
2、容易扩展规模。

缺点

1、当处理逻辑较多时,会造成中介者本身的复杂性较大。

Python设计模式-中介者模式相关推荐

  1. Python实现-中介者模式

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

  2. Python设计模式-装饰器模式

    Python设计模式-装饰器模式 代码基于3.5.2,代码如下; #coding:utf-8 #装饰器模式class Beverage():name = ""price = 0.0 ...

  3. Python设计模式-职责链模式

    Python设计模式-职责链模式 代码基于3.5.2,代码如下; #coding:utf-8 #职责链模式class Handler():def __init__(self):self.success ...

  4. Python设计模式-享元模式

    Python设计模式-享元模式 基于Python3.5.2,代码如下 #coding:utf-8class Coffee:name = ""price = 0def __init_ ...

  5. python的编程模式-Python设计模式之状态模式原理与用法详解

    本文实例讲述了Python设计模式之状态模式原理与用法.分享给大家供大家参考,具体如下: 状态模式(State Pattern):当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类 ...

  6. python策略模式包含角色_详解Python设计模式之策略模式

    虽然设计模式与语言无关,但这并不意味着每一个模式都能在每一门语言中使用.<设计模式:可复用面向对象软件的基础>一书中有 23 个模式,其中有 16 个在动态语言中"不见了,或者简 ...

  7. 7. 星际争霸之php设计模式--中介者模式

    题记 ============================================================================== 本php设计模式专辑来源于博客(jy ...

  8. 【设计模式】Java设计模式 - 中介者模式

    Java设计模式 - 中介者模式

  9. python设计模式之建造者模式

    python设计模式之建造者模式 ​ 建造者模式的适用范围:想要创建一个由多个部分组成的对象,而且它的构成需要一步接一步的完成.只有当各个部分都完成了,这个对象才完整.建造者模式表现为复杂对象的创建与 ...

最新文章

  1. mysql min函数 结果全为null_MySQL ----- 聚集函数(AVG,SUM,COUNT,MIN,MAX) (十一)
  2. 肝!分享 2 本高质量算法书籍!
  3. python路径拼接os.path.join()函数和os.makedirs的用法
  4. linux查看磁盘io带宽,[Linux] 磁盘IO性能查看和优化以及iostat命令
  5. Unity3d AR 增强现实技术列表(2016年3月31日更新)
  6. [转]使用xcode4 workspace 多个project协同工作
  7. 万亿美元软件浪潮来临,开发者是核心!
  8. 雕刻机控制软件破解笔记
  9. 批量调度工具 Taskctl 作业类型的维护管理
  10. python 爬取 js渲染_scrapy 爬取 javascript 动态渲染页面
  11. 彻底关闭Windows10自动更新的详细解决方案
  12. 领导和同事嫌弃你的6个征兆,离失业不远了
  13. 支付宝转账到银行卡的功能测试点
  14. 3 Idiots ——谢 阿米尔·汗
  15. 二维dct变换例题_数字图像处理试题(带答案)
  16. python青蛙跳台阶_Python算法题(一)——青蛙跳台阶
  17. CMOS反相器版图设计
  18. NPDP新产品考试考后感想~
  19. 千万珍惜:男人只有一滴泪
  20. 聊聊刘慈欣作品的风格

热门文章

  1. MySQL之父等国际数据库掌门人齐聚,1024 程序员节全体大会重磅官宣!
  2. Python 的一万种用法:制作 Web 可视化页面
  3. 释放联接新价值,华为提出“1+N”5G目标网,推动运营商构筑四大数字化转型的核心能力
  4. 升级版APDrawing,人脸照秒变线条肖像画,细节呈现惊人
  5. 美国 AI 博士一针见血:Python 这样学最容易成为高手!
  6. 阿里云蒋江伟:我们致力于为世界提供70%的算力 | 凌云时刻
  7. 中国AI开发者真实现状:写代码这条路,会走多久?
  8. 程序员单身比例有多高?【2019开发者图鉴】告诉你
  9. 呵呵,你开心就好!——AI向杠精宣战
  10. AI 助力金融后,中美金融科技领域最大的差距是什么?