当前位置: 首页 > wzjs >正文

河南中安建设集团有限公司网站苏州建交建设工程有限公司

河南中安建设集团有限公司网站,苏州建交建设工程有限公司,怎么用织梦修改建设一个新的网站,兰州网站建设运营方案文章目录 前言一、中介者模式二、中介者模式示例 前言 GOF设计模式分三大类: 创建型模式:关注对象的创建过程,包括单例模式、简单工厂模式、工厂方法模式、抽象工厂模式、原型模式和建造者模式。结构型模式:关注类和对象之间的组…

文章目录

  • 前言
  • 一、中介者模式
  • 二、中介者模式示例


前言

GOF设计模式分三大类:

  • 创建型模式:关注对象的创建过程,包括单例模式、简单工厂模式、工厂方法模式、抽象工厂模式、原型模式和建造者模式。
  • 结构型模式:关注类和对象之间的组合,包括适配器模式、桥接模式、组合模式、装饰模式、外观模式、享元模式和代理模式。
  • 行为型模式:关注对象之间的交互,包括职责链模式、命令模式、解释器模式、迭代器模式、中介者模式、备忘录模式、观察者模式、状态模式、策略模式、模板方法模式和访问者模式。

一、中介者模式

中介者模式(Mediator Pattern)

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

  • 解决问题:如何协调多个对象之间复杂的相互调用?

  • 使用场景:

    • 系统中对象之间存在复杂的引用关系,系统结构混乱且难以理解。
    • 一个对象由于引用了其他很多对象并且直接和这些对象通信,导致难以复用该对象。
    • 想通过一个中间类来封装多个类中的行为,而又不想生成太多的子类。
  • 组成:

    • Mediator(抽象中介者):它定义一个接口,该接口用于与各同事对象之间进行通信。
    • ConcreteMediator(具体中介者):它是抽象中介者的子类,通过协调各个同事对象来实现协作行为,维持了对各个同事对象的引用。
    • Colleague(抽象同事类):它定义各个同事类公有的方法,并声明了一些抽象方法来供子类实现,同时维持了一个对抽象中介者类的引用,其子类可以通过该引用来与中介者通信。
    • ConcreteColleague(具体同事类):它是抽象同事类的子类。每一个同事对象在需要和其他同事对象通信时,先与中介者通信,通过中介者来间接完成与其他同事类的通信。在具体同事类中实现了在抽象同事类中声明的抽象方法。
  • 补充说明:

    • 中介者模式将一个网状的系统结构变成一个以中介者对象为中心的星形结构。在这个星形结构中,使用中介者对象与其他对象的一对多关系来取代原有对象之间的多对多关系
    • 通过引入中介者来简化对象之间的复杂交互,中介者模式是迪米特法则的一个典型应用。
    • 中介者类承担了以下两方面的职责:
      • 中转作用(结构性)
      • 协调作用(行为性)
  • 优点:

    • 使用中介者类来协调多个类/对象之间的交互,以达到降低系统耦合度的目的。
    • 中介者模式简化了对象之间的交互
    • 可以减少大量同事子类生成
  • 缺点:

    • 在具体中介者类中包含了大量同事之间的交互细节,可能会导致具体中介者类非常复杂,使得系统难以维护。

在这里插入图片描述

二、中介者模式示例

为了协调界面组件对象之间的复杂交互关系,使用中介者模式来设计客户信息管理窗口

  • 为了确保系统具有更好的灵活性和可扩展性,需要定义抽象中介者和抽象组件类,其中抽象组件类是所有具体组件类的公共父类。
  • Component充当抽象同事类,Button、List、ComboBox和TextBox充当具体同事类,Mediator充当抽象中介者类,ConcreteMediator充当具体中介者类。ConcreteMediator维持了对具体同事类的引用
"""抽象中介者"""class Mediator:def component_changed(self, c: "Component"):raise NotImplementedError"""具体中介者"""class ConcreteMediator(Mediator):def __init__(self):self.add_button: Button = Noneself.my_list: MyList = Noneself.user_name_text_box: TextBox = Noneself.cb: ComboBox = Nonedef component_changed(self, c):# 封装同事对象之间的交互if c == self.add_button:# 单击按钮print("——单击增加按钮——")self.my_list.update()self.cb.update()self.user_name_text_box.update()elif c == self.my_list:# 从列表框中选择客户print("——从列表框中选择客户——")self.cb.select()self.user_name_text_box.set_text()elif c == self.cb:# 从组合框中选择客户print("——从组合框中选择客户——")self.cb.select()self.user_name_text_box.set_text()"""抽象同事类/抽象组件类"""class Component:def __init__(self):self.mediator: Mediator = Nonedef changed(self):# 转发调用self.mediator.component_changed(self)def update(self):raise NotImplementedError"""具体同事类/具体组件类"""class Button(Component):def update(self):# 按钮不产生响应passclass TextBox(Component):def update(self):print("客户信息增加成功后文本框清空。")def set_text(self):print("文本框显示《三国演义》。")class ComboBox(Component):def update(self):print("组合框增加一项:《红楼梦》")def select(self):print("组合框选中项:《三国演义》")class MyList(Component):def update(self):print("列表框增加一项:《红楼梦》")def select(self):print("列表框选中项:《三国演义》")

在这里插入图片描述

  • 客户端代码
if __name__ == "__main__":# 定义中介者对象mediator = ConcreteMediator()# 定义同事对象add_button = Button()my_list = MyList()cb = ComboBox()user_name_tb = TextBox()add_button.mediator = mediatormy_list.mediator = mediatorcb.mediator = mediatoruser_name_tb.mediator = mediatormediator.add_button = add_buttonmediator.my_list = my_listmediator.cb = cbmediator.user_name_text_box = user_name_tbadd_button.changed()print("#" * 10)my_list.changed()
  • 输出结果
——单击增加按钮——
列表框增加一项:《红楼梦》
组合框增加一项:《红楼梦》
客户信息增加成功后文本框清空。
##########
——从列表框中选择客户——
组合框选中项:《三国演义》
文本框显示《三国演义》。

您正在阅读的是《设计模式Python版》专栏!关注不迷路~


文章转载自:

http://W44rI3Fe.xhfky.cn
http://UpZF0DOy.xhfky.cn
http://vCSKtzA1.xhfky.cn
http://FpdaUn0S.xhfky.cn
http://r3Dhdkae.xhfky.cn
http://qItkiu4I.xhfky.cn
http://s1yBeqIf.xhfky.cn
http://MEhBhoC7.xhfky.cn
http://0LJt31hA.xhfky.cn
http://SgbnOqvE.xhfky.cn
http://M457x8DU.xhfky.cn
http://5GJjTJnJ.xhfky.cn
http://z1XDMCbT.xhfky.cn
http://1MnOfzJD.xhfky.cn
http://2recF5o2.xhfky.cn
http://UiLlUay9.xhfky.cn
http://lgy77SQ6.xhfky.cn
http://RkXfz4Pb.xhfky.cn
http://knlgHiAB.xhfky.cn
http://UcJ5Utnq.xhfky.cn
http://XmFFVdNs.xhfky.cn
http://P9apEcl0.xhfky.cn
http://asLPDKZ1.xhfky.cn
http://wUMjEIQ5.xhfky.cn
http://2aJIfUqE.xhfky.cn
http://En8JV3sS.xhfky.cn
http://KUGG3qGc.xhfky.cn
http://3IWldFp8.xhfky.cn
http://6ndwgODY.xhfky.cn
http://a255kBTF.xhfky.cn
http://www.dtcms.com/wzjs/685183.html

相关文章:

  • 校园网站建设提升郑州妇科医院免费咨询
  • 做网站 数据库深圳华强北营业时间
  • 网站后台设计教程视频企业网站建设周期
  • 个人网站项目策划书论坛网站有哪些
  • 境外做网站网站电脑制作图片的软件
  • 产权交易网站建设方案icp备案网站接入信息怎么填
  • 点击图片进入网站要怎么做《小城镇建设》》杂志社网站
  • 新手如何建设网站请简述网站开发的流程图
  • 济宁网站建设500元怎么修改网站主页
  • 公司要做网站去哪里购买网站服务器
  • 网站开发用qq登录网站无缝背景
  • 云南建设企业网站佛山网站建站建设
  • 做海淘网站赚钱吗vi设计服务
  • 抚州公司做网站知名网站域名被抢注
  • 海丰县建设局官方网站汕头网站制作方法
  • 计算机网站建设员上海建网站计划
  • wordpress网站的根目录在哪做影视网站该怎么发展
  • 网站页面组成利用社交网站做淘宝客
  • 编程网站开发培训在线制作网页系统
  • 网站建设实训报告意见和建议怎么做营销网站
  • 烟台做网站需要多少钱网站 备份 还原
  • 网站如何交换链接wordpress黑暗
  • 网站域名已经被绑定网络营销推广的优劣势
  • 想开发一个旧物交易网站应该怎么做怎么自己做影视网站
  • 合肥网站开发公司电话网站文章采集
  • 二维码制作网站链接二次开发的意思
  • 网站如何微信支付镇江网站制作哪家公司比较好
  • 做网站工资高么网站建设费属于无形资产吗
  • 新手做淘宝哪个网站比较好网件路由器登录网址
  • wordpress网站360搜索收录怎样做音视频宣传网站