Python设计模式-中介者模式
来源:互联网 发布:网络客服招聘 编辑:程序博客网 时间:2024/06/10 10:49
Python设计模式-中介者模式
代码基于3.5.2,代码如下;
#coding:utf-8#中介者模式class colleague(): mediator = None def __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 = 0 threshold = 100 def setThreshold(self,threshold): self.threshold = threshold def isEnough(self): if self.total < self.threshold: print("WARNING:Warning ... Stock is low ..") self.mediator.execute("warning",self.total) return False else: return True def inc(self,num): self.total += num print("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 -= num print("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 = None sales = None warehouse = None def setPurchase(self,purchase): self.purchase = purchase def setWarehouse(self,warehouse): self.warehouse = warehouse def setSales(self,sales): self.sales = sales def 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 300MEDIATOR:Get Info -- buyWAREHOUSE:Increase 300MEDIATOR:Get Info -- increaseSALES:Get Notice -- Inc 300PURCHASE:Get Notice -- Inc 300SALES:Get Notice -- Bought 300SALES:Sell 120MEDIATOR:Get Info -- sellWAREHOUSE:Decrease 120MEDIATOR:Get Info -- decreaseSALES:Get Notice -- Dec 120PURCHASE:Get Notice -- Dec 120WARNING:Warning ... Stock is low ..MEDIATOR:Get Info -- warningSALES:Get Notice -- Stock is low 180 leftPURCHASE:Get Notice -- Stock is low. Please Buy More 180PURCHASE:Get Notice -- Sold 120
中介者模式应用场景:
1、设计类图时,出现了网状结构时,可以考虑将类图设计成星型结构,这样就可以实现中介模式;2、适用于一组对象以定义良好但是复杂的方式进行通信的场合;3、想定制一个分布在多个类中的行为,而又不想生成太多的子类的场合。
优缺点分析
优点
1、减少类与类的依赖,降低了类和类之间的耦合;2、容易扩展规模。
缺点
1、当处理逻辑较多时,会造成中介者本身的复杂性较大。
阅读全文
0 0
- Python设计模式-中介者模式
- 设计模式-中介者模式-mediator-python
- python设计模式(中介者模式)
- 【设计模式】中介者
- 中介者设计模式
- 设计模式-中介者
- 设计模式-中介者
- [设计]中介者模式
- 中介者模式(python)
- 中介者模式 python
- 设计模式 中介者模式
- 设计模式-中介者模式
- 设计模式 - 中介者模式
- 设计模式-中介者模式
- 设计模式:中介者模式
- 设计模式--中介者模式
- 设计模式-中介者模式
- 设计模式--中介者模式
- uwsgi+django+nginx+supervisor部署web应用(python)
- 关于为什么element对象的childNodes属性返回值有偏差的问题解释(知其所以然)
- kernel (I) basic learning
- Python设计模式-解释器模式
- ubuntu16.04 安装有道词典
- Python设计模式-中介者模式
- Python设计模式-备忘录模式
- Python设计模式-状态模式
- 非线性最小二乘法优化问题(1)
- Python基础-多进程
- kernel(II)
- GC日志解读
- NUC1312 Sum【水题+数学题】
- join不产生Shuffle的情况及案例实战