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

设计者模式之中介者模式(下)

3)中介者与同事类的扩展
1.结构图

在这里插入图片描述

新增了具体同事类Label和具体中介者类SubConcreteMediator。

2.代码实现
//文本标签类:具体同事类
public class Label extends Component {public void update() {System.out.println("文本标签内容改变,客户信息总数加1。");}
}//新增具体中介者类
public class SubConcreteMediator extends ConcreteMediator {//增加对Label对象的引用public Label label;public void componentChanged(Component c) {//单击按钮if(c == addButton) {System.out.println("--单击增加按钮--");list.update();cb.update();userNameTextBox.update();label.update(); //文本标签更新}else if(c == list) {//从列表框选择客户System.out.println("--从列表框选择客户--");cb.select();userNameTextBox.setText();}else if(c == cb) {//从组合框选择客户System.out.println("--从组合框选择客户--");cb.select();userNameTextBox.setText();}}
}

客户端类

public class Client {public static void main(String args[]) {//用新增具体中介者定义中介者对象SubConcreteMediator mediator;mediator = new SubConcreteMediator();Button addBT = new Button();List list = new List();ComboBox cb = new ComboBox();TextBox userNameTB = new TextBox();Label label = new Label();addBT.setMediator(mediator);list.setMediator(mediator);cb.setMediator(mediator);userNameTB.setMediator(mediator);label.setMediator(mediator);mediator.addButton = addBT;mediator.list = list;mediator.cb = cb;mediator.userNameTextBox = userNameTB;mediator.label = label;addBT.changed();System.out.println("-----------------------------");list.changed();}
}
4)总结
1.优点
  • 中介者模式简化了对象之间的交互,它用中介者和同事的一对多交互代替了原来同事之间的多对多交互,将难以理解的网状结构转换成相对简单的星型结构。

  • 中介者模式将各同事对象解耦,可以独立的改变和复用每一个同事和中介者,增加新的中介者和新的同事类都比较方便。

  • 可以减少子类生成,中介者将原本分布于多个对象间的行为集中在一起,改变这些行为只需生成新的中介者子类即可。

2.缺点

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

3.适用场景
  • 系统中对象之间存在复杂的引用关系,系统结构混乱且难以理解。

  • 一个对象由于引用了其他很多对象并且直接和这些对象通信,导致难以复用该对象。

  • 想通过一个中间类来封装多个类中的行为,而又不想生成太多的子类,可以通过引入中介者类来实现,在中介者中定义对象交互的公共行为,如果需要改变行为则可以增加新的具体中介者类。

http://www.lryc.cn/news/338576.html

相关文章:

  • SAP SD学习笔记04 - 出荷Plant(交货工厂),出荷Point(装运点),输送计划,品目的可用性检查,一括纳入/分割纳入,仓库管理
  • bind包装器——C++新特性(三)
  • MXNet的下载安装及问题处理
  • Python 中的列表排序和排序规则
  • 面经整理1
  • ChatGPT个人专用版 SSRF漏洞复现(CVE-2024-27564)
  • Python中的可哈希与不可哈希对象详解
  • 【嵌入式DIY实例】-DIY速度计
  • 1.0 Hadoop 教程
  • 【无人机/平衡车/机器人】详解STM32+MPU6050姿态解算—卡尔曼滤波+四元数法+互补滤波(文末附3个算法源码)
  • 智能水务系统:构建高效节水的城市水网
  • 【JavaEE初阶系列】——网络编程 UDP客户端/服务器 程序实现
  • 数据结构复习指导之绪论(算法的概念以及效率的度量)
  • C语言经典例题(23)
  • Gitea的简单介绍
  • Qt信号与槽
  • QQ农场-phpYeFarm添加数据教程
  • Java中创建多线程的方法
  • MT3020 任务分配
  • 【Redis】事务
  • 每日一题(leetcode238):除自身以外数组的乘积--前缀和
  • 内网通如何去除广告,内网通免广告生成器
  • 视频知识整理
  • 【2024】使用Rancher管理k8s集群和创建k8s集群
  • 生成对抗网络 – Generative Adversarial Networks | GAN
  • 基于深度学习的生活垃圾智能分类系统(微信小程序+YOLOv5+训练数据集+开题报告+中期检查+论文)
  • 软件包名生成参考
  • 八大排序算法(面试被问到)
  • SCP指令详细使用介绍
  • 《前端面试题》- JS基础 - 防抖和节流