python设计模式(十八):中介者模式
将其他对象之间的交互装在中介者对象中,达到松耦合、隐式引用、独立变化,与代理模式有相似之感《python设计模式(十一):代理模式模式》,但是代理模式是结构性模式,侧重于对对象调用的接口控制,而中介者模式是行为性模式,解决对象与对象之间相互调用的行为问题。
我们以生产者和消费者之间的销售作为一个中介者,用对象来表示生产和购买及流通这个过程。
class Consumer:
"""消费者类"""
def __init__(self, product, price):
self.name = "消费者"
self.product = product
self.price = price
def shopping(self, name):
"""买东西"""
print("向{} 购买 {}价格内的 {}产品".format(name, self.price, self.product))
class Producer:
"""生产者类"""
def __init__(self, product, price):
self.name = "生产者"
self.product = product
self.price = price
def sale(self, name):
"""卖东西"""
print("向{} 销售 {}价格的 {}产品".format(name, self.price, self.product))
class Mediator:
"""中介者类"""
def __init__(self):
self.name = "中介者"
self.consumer = None
self.producer = None
def sale(self):
"""进货"""
self.consumer.shopping(self.producer.name)
def shopping(self):
"""出货"""
self.producer.sale(self.consumer.name)
def profit(self):
"""利润"""
print('中介净赚:{}'.format((self.consumer.price - self.producer.price )))
def complete(self):
self.sale()
self.shopping()
self.profit()
if __name__ == '__main__':
consumer = Consumer('手机', 3000)
producer = Producer("手机", 2500)
mediator = Mediator()
mediator.consumer = consumer
mediator.producer = producer
mediator.complete()
# 向生产者 购买 3000价格内的 手机产品
# 向消费者 销售 2500价格的 手机产品
# 中介净赚:500
使用场景: 1、系统中对象之间存在比较复杂的引用关系,导致它们之间的依赖关系结构混乱而且难以复用该对象。 2、想通过一个中间类来封装多个类中的行为,而又不想生成太多的子类。
注意事项:不应当在职责混乱的时候使用。
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
python设计模式(十七):迭代器模式——迭代器与生成器
迭代模式:对外提供一个接口,实现顺序访问聚合数据,但是不显示该数据的内部机制。这就是Python中大名鼎鼎的迭代器。 实现迭代模式对于Python来说没有多余的代码,寥寥几行代码足可以实现迭代模式。 示例code: #-*-coding:utf-8-*-defFibonacciSequence(n): x=0 y=1 i=1 whileTrue: yieldy ifi==n: break x,y=y,x+y i+=1if__name__=='__main__': test=FibonacciSequence(7) next(test) 1 next(test) 1 next(test) 2 next(test) 3 next(test) 5 next(test) 8 next(test) 13 next(test) 以上是使用迭代模式输出斐波那契数列的前n列,较传统的实现方法而言更加的简洁。 迭代器模式常应用场景是在只提供接口而不暴露内部机制的场景中,yield关键词在python协程中也有应用。 迭代器、生成器、可迭代对象概念 生成器:对于一个数据集合,生成器并不记住每个元素值,但在...
- 下一篇
python设计模式(十九):备忘录模式
备忘录,定义是:在不破坏封闭的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。简单来说在运行过程中我们可以记录某个状态,当遇到错误时恢复当前状态,这在业务流程中是用设计来处理异常情况。 示例code: classAddNumber: def__init__(self): self.start=1 defadd(self,number): self.start+=number print(self.start)classMemento: """备忘录""" defbackups(self,obj=None): """ 设置备份方法 :paramobj: :return: """ self.obj_dict=copy.deepcopy(obj.__dict__) print("备份数据:{}".format(self.obj_dict)) defrecovery(self,obj): """ 恢复备份方法 :paramobj: :return: """ obj.__dict__.clear() obj.__dict__.update(s...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- Linux系统CentOS6、CentOS7手动修改IP地址
- SpringBoot2整合Thymeleaf,官方推荐html解决方案
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- CentOS6,CentOS7官方镜像安装Oracle11G
- 设置Eclipse缩进为4个空格,增强代码规范
- CentOS7,8上快速安装Gitea,搭建Git服务器
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- CentOS7,CentOS8安装Elasticsearch6.8.6
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作