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

做暖暖的视频网站能联系做仿瓷的网站

做暖暖的视频网站,能联系做仿瓷的网站,wordpress邮件发送 插件,wordpress夜间模式目录 定义 类图结构展示 角色职责详解 模式的优缺点分析 优点 缺点 适用场景 应用实例 与其他模式的结合与拓展 总结 定义 中介者模式的核心思想可以概括为:用一个中介对象来封装一系列的对象交互。这个中介者就像一个通信枢纽,使各对象不需要…

目录

定义

类图结构展示

角色职责详解

模式的优缺点分析

优点

缺点

适用场景

应用实例

与其他模式的结合与拓展

总结


定义

        中介者模式的核心思想可以概括为:用一个中介对象来封装一系列的对象交互。这个中介者就像一个通信枢纽,使各对象不需要显式地相互引用,从而降低它们之间的耦合度,并且可以独立地改变它们之间的交互规则。这种模式的本质是将对象之间的多对多交互转化为对象与中介者之间的一对多交互,通过中介者的协调来维持系统的正常运转。

类图结构展示

角色职责详解

  • 抽象中介者(Mediator)角色:它是中介者的接口,定义了同事对象注册与转发同事对象信息的抽象方法。这个角色为具体中介者提供了统一的接口规范,确保所有中介者实现都具备基本的通信协调能力。

  • 具体中介者(ConcreteMediator)角色:实现中介者接口,通常会维护一个用于管理同事对象的列表。它的核心职责是协调各个同事角色之间的交互关系,因此必然依赖于同事角色。具体中介者是交互逻辑的实际承载者,它根据不同的业务场景实现具体的协调逻辑。

  • 抽象同事(Colleague)角色:定义同事类的接口,保存中介者对象的引用,提供同事对象交互的抽象方法,实现所有相互影响的同事类的公共功能。通过持有中介者的引用,同事对象可以将交互请求委托给中介者处理。

  • 具体同事类(Concrete Colleague)角色:是抽象同事类的具体实现者。当需要与其他同事对象交互时,不再直接调用其他同事的方法,而是将请求发送给中介者对象,由中介者负责后续的交互协调。这种方式彻底解耦了同事之间的直接依赖。

模式的优缺点分析

优点

  • 简化对象关系,实现松耦合:中介者模式将系统中各个对象之间的复杂相互关系进行封装,把原本多对多的混乱交互转化为对象与中介者之间的一对多交互。这种封装使得各个同事类之间解耦,系统变为松耦合的结构,大大降低了系统的理解和维护难度。当某个同事类发生变化时,只要其与中介者的接口不变,就不会对其他同事类产生直接影响。

  • 提高系统灵活性,便于复用:由于同事对象与中介者之间是松耦合的,各个同事对象可以独立地进行开发和测试,并且易于复用。当需要在不同的场景中使用相同的同事类时,只需搭配不同的中介者实现即可,而无需修改同事类的代码。这种灵活性使得系统能够更好地应对需求的变化和扩展。

缺点

  • 中介者责任过重:在中介者模式中,中介者角色承担了过多的责任,它几乎掌握了所有同事对象的交互逻辑。这就导致一旦中介者对象出现问题,整个系统的交互机制将会受到重大影响,甚至可能导致系统崩溃。因此,在设计中介者时,需要谨慎考虑其复杂性,避免使其成为系统的单一故障点。

  • 扩展新同事类的局限性:当需要新增加一个同事类时,往往不得不去修改抽象中介者类和具体中介者类,以处理新同事类与其他同事类之间的交互逻辑。这种修改可能会违背 “开闭原则”,增加系统的维护成本。为了解决这个问题,可以考虑结合观察者模式和状态模式来灵活扩展中介者的功能,减少对原有代码的修改。

适用场景

  • 对象间存在复杂交互的系统:当一组定义良好的对象需要进行复杂的相互通信,且这些对象之间的交互关系呈现出网状结构时,中介者模式是一个很好的选择。例如,在图形界面设计中,窗口中的各种控件(按钮、文本框、列表框等)之间可能存在复杂的交互关系,使用中介者模式可以将这些交互逻辑集中到中介者中,使控件之间解耦。

  • 希望通过中间类封装多类行为的场景:当你想通过一个中间类来封装多个类中的行为,而又不想生成太多的子类时,中介者模式非常适用。它通过中介者统一管理各对象的交互,避免了因对象间直接交互而导致的类爆炸问题。

应用实例

        以一个简单的聊天系统为例,多个用户(同事类)通过聊天服务器(中介者)进行消息交流:

from abc import ABC, abstractmethodfrom typing import List# 抽象中介者:聊天服务器class ChatMediator(ABC):@abstractmethoddef register_user(self, user):pass@abstractmethoddef send_message(self, message, sender):pass# 具体中介者:实现聊天服务器功能class ConcreteChatMediator(ChatMediator):def __init__(self):self.users: List[User] = []def register_user(self, user):if user not in self.users:self.users.append(user)user.set_mediator(self)def send_message(self, message, sender):for user in self.users:# 不向发送者自己发送消息if user != sender:user.receive_message(message)# 抽象同事:用户class User(ABC):def __init__(self, name):self.name = nameself.mediator = Nonedef set_mediator(self, mediator):self.mediator = mediator@abstractmethoddef send_message(self, message):pass@abstractmethoddef receive_message(self, message):pass# 具体同事:实现用户功能class ConcreteUser(User):def send_message(self, message):print(f"{self.name} 发送消息: {message}")if self.mediator:self.mediator.send_message(message, self)def receive_message(self, message):print(f"{self.name} 接收消息: {message}")# 使用示例if __name__ == "__main__":# 创建中介者mediator = ConcreteChatMediator()# 创建同事对象user1 = ConcreteUser("张三")user2 = ConcreteUser("李四")user3 = ConcreteUser("王五")# 注册同事到中介者mediator.register_user(user1)mediator.register_user(user2)mediator.register_user(user3)# 同事之间通过中介者交互user1.send_message("大家好,这是一个中介者模式的示例!")user2.send_message("你好,张三,很高兴学习这个模式!")user3.send_message("我也来参与讨论,中介者模式确实很有用!")

        在这个示例中,聊天服务器(ConcreteChatMediator)作为中介者,管理着所有用户(ConcreteUser)的注册,并负责转发消息。用户之间无需直接知道彼此的存在,只需通过中介者进行通信,实现了对象之间的解耦。

与其他模式的结合与拓展

        当面临新增加同事类需要修改中介者的问题时,可以结合观察者模式来优化。将中介者作为观察者,同事类作为被观察者,当同事类状态发生变化时,通知中介者进行相应的处理,从而减少对中介者代码的直接修改。此外,状态模式也可以与中介者模式结合使用,根据不同的状态让中介者采用不同的交互策略,使系统更加灵活和可扩展。

总结

        中介者模式通过引入中介者对象,巧妙地化解了对象间复杂的交互难题,为构建松耦合、可维护的软件系统提供了有力的支持。在实际开发中,合理运用该模式可以使系统架构更加清晰,代码更加简洁,从而提高软件开发的效率和质量。


文章转载自:

http://d2wEk68X.wdhhz.cn
http://47VfQhDv.wdhhz.cn
http://PON6dLRb.wdhhz.cn
http://uU1dGLt6.wdhhz.cn
http://McgAUOtt.wdhhz.cn
http://PFKSZ8gD.wdhhz.cn
http://Wjkqlvgf.wdhhz.cn
http://Z5U43bkO.wdhhz.cn
http://btxZp5Ye.wdhhz.cn
http://TjBTWg74.wdhhz.cn
http://nyv2wi3e.wdhhz.cn
http://BltiQKm4.wdhhz.cn
http://PYnWhjHv.wdhhz.cn
http://THGot0Cc.wdhhz.cn
http://lQAVorEc.wdhhz.cn
http://ru9EKjWY.wdhhz.cn
http://Oe44szBm.wdhhz.cn
http://GEMXlOGB.wdhhz.cn
http://Vxe4LzU1.wdhhz.cn
http://HEkXBQdA.wdhhz.cn
http://m6ZKyJ4R.wdhhz.cn
http://L6WcxmNE.wdhhz.cn
http://RX4cMPN8.wdhhz.cn
http://Pq53Lm09.wdhhz.cn
http://Tc6ypKG6.wdhhz.cn
http://ptDJSHAp.wdhhz.cn
http://2GXKSAHE.wdhhz.cn
http://2up3jROL.wdhhz.cn
http://Cwl2IRxp.wdhhz.cn
http://3i8pNc7k.wdhhz.cn
http://www.dtcms.com/wzjs/738595.html

相关文章:

  • 为什么找不到做网站的软件廊坊森纳特化工有限公司
  • 简述网站制作方案和主要内容科技强国从升级镜头开始
  • 在线文档网站源码该如何建设和优化一个网站
  • 福州网站大全教人如何做吃的网站
  • 如何上传自己做的网站网站开发结论
  • 赣州网站开发公司网站网页?问?
  • 龙游网站建设的公司网站建设公司公司我我提供一个平台
  • 深圳做公司英文网站多少钱大公司网站建设
  • 小白如何建设网站wordpress字体编辑
  • 滑县网站建设哪家好物流网站开发系统论文
  • 网站建设找什么公司好快速微信网站开发
  • 如何做新闻自动采集网站网页小游戏列表
  • 阜阳市重点工程建设局网站东莞常平嘉盛学校
  • 河南城乡建设部网站wordpress 商城插件
  • 电子商务企业网站建设规划专业营销型网站建设费用
  • 沈阳中天建设集团网站o2o的含义
  • 网站开发的目的相关书籍wordpress淘宝客自适应模板
  • wordpress建自己的网站高新网站建设
  • 企业网站建设的层次河南省建设网站
  • 贵港建设局网站查询dkp网站开发
  • 网站开发的案例分析模板河北做it的网站
  • 手机 网站服务器大连网站建设哪里好
  • 网页设计网站世界杯网站设计 版权
  • 百度网站加vwordpress 图片拉伸
  • wordpress 建网站 vpn做网站私活多少钱
  • wordpress开启多站点大理 网站建设
  • 创建网站的快捷方式网站做乘法表
  • 网络营销推广好做吗seo站长工具查询系统
  • 淄博网站运营公司网站名重复
  • 网站做定制还是固定模板网站模版图片