登录
/
注册
首页
论坛
其它
首页
科技
业界
安全
程序
广播
Follow
关于
每日签到
每天签到奖励2圆-6圆
发帖说明
VIP申请
登录
/
注册
账号
自动登录
找回密码
密码
登录
立即注册
搜索
搜索
关闭
CSDN热搜
程序园
精品问答
技术交流
资源下载
本版
帖子
用户
软件
问答
教程
代码
写记录
写博客
VIP申请
VIP网盘
网盘
联系我们
每日签到
道具
勋章
任务
设置
我的收藏
退出
腾讯QQ
微信登录
返回列表
首页
›
业界区
›
业界
›
设计模式(十七)中介者
设计模式(十七)中介者
[ 复制链接 ]
裸历
2025-6-9 08:31:00
一、定义
义一个对象来封装一系列的对象交互。中介者模式使各对象不需要显示地相互引用,从而使其耦合松散,而且可以让你相对独立地改变它们之间的交互。中介者模式又称为调停模式,它是一种对象说行为型模式。
二、描述
在中介者模式中,引入了用于协调其他对象/类之间的相互调用的中介者类,为了让系统具有更好的灵活性和可扩展性,通常还提供了抽象中介者,包含以下四个角色:
1、Mediator(抽象中介者):它定义了一个接口,该接口用于与各同事对象之间进行通信。
2、ConcreteMediator(具体中介者):它是抽象中介者的子类,通过协调各个同事对象来实现协作行为,维持了各个同事对象的引用。
3、Colleague(抽象同事类):它定义了各个同事类公有的方法,并声明了一些抽象方法来供子类实现,同时维持了一个对抽象中介者类的引用,其子类可以通过该引用来与中介者通信。
4、ConcreteColleague(具体同事类):它是抽象同事类的子类,每一个同事对象需要和其他对象通信时,先与中介者对象通信,通过中介者来间接完成与其他同事类的通信,在具体同事类中实现了在抽象同事类中声明的抽象方法。
三、例子
X公司欲开发一套CRM系统,其中包含一个客户信息管理模块,界面包含了按钮、文本框、列表框、下拉框等多个组件,增加或删除一个客户,各组件均会发生联动效果,较为复杂。
Mediator:抽象中介者
public abstract class Mediator
{
public abstract void ComponenetChanged(Component c);
}
复制代码
ConcreteMediator:具体中介者
public class ConcreteMediator : Mediator
{
// 维持对各个同事对象的引用
public Button addButton;
public List list;
public TextBox userNameTextBox;
public ComboBox cb;
// 封装同事对象之间的交互
public override void ComponenetChanged(Component c)
{
// 单击按钮
if (c == addButton)
{
Console.WriteLine("-- 单击增加按钮 --");
list.Update();
cb.Update();
userNameTextBox.Update();
}
// 从列表框选择客户
else if (c == list)
{
Console.WriteLine("-- 从列表框选择客户 --");
cb.Select();
userNameTextBox.SetText();
}
// 从组合框选择客户
else if (c == cb)
{
Console.WriteLine("-- 从组合框选择客户 --");
cb.Select();
userNameTextBox.SetText();
}
}
}
复制代码
Component:抽象组件,充当抽象同事类(Colleague)
public abstract class Component
{
protected Mediator mediator;
public void SetMediator(Mediator mediator)
{
this.mediator = mediator;
}
// 转发调用
public void Changed()
{
mediator.ComponenetChanged(this);
}
public abstract void Update();
}
复制代码
Button、List、ComboBox、TextBox:按钮、列表框、组合框、文本框,具体组件,充当具体同事类(ConcreteColleague)
public class Button : Component
{
public override void Update()
{
// 按钮不产生响应
}
}
public class List : Component
{
public override void Update()
{
Console.WriteLine("列表框增加一项:张无忌");
}
public void Select()
{
Console.WriteLine("列表框选中项:小龙女");
}
}
public class ComboBox : Component
{
public override void Update()
{
Console.WriteLine("组合框增加一项:张无忌");
}
public void Select()
{
Console.WriteLine("组合框选中项:小龙女");
}
}
public class TextBox : Component
{
public override void Update()
{
Console.WriteLine("客户信息增加成功后文本框清空");
}
public void SetText()
{
Console.WriteLine("文本框显示:小龙女");
}
}
复制代码
Program:客户端测试类
// Step1.定义中介者对象
ConcreteMediator mediator = new ConcreteMediator();
// Step2.定义同事对象
Button addButton = new Button();
List list = new List();
ComboBox cb = new ComboBox();
TextBox userNameTextBox = new TextBox();
addButton.SetMediator(mediator);
list.SetMediator(mediator);
cb.SetMediator(mediator);
userNameTextBox.SetMediator(mediator);
mediator.addButton = addButton;
mediator.list = list;
mediator.cb = cb;
mediator.userNameTextBox = userNameTextBox;
// Step3.点击增加按钮
addButton.Changed();
Console.WriteLine("---------------------------------------------");
// Step4.从列表框选择客户
list.Changed();
Console.ReadLine();
复制代码
四、总结
1、优点
(1)中介者模式简化了对象之间的交互,它用中介者和同事的一对多交互代替了原来同事之间的多对多交互,一对多关系更容易理解、维护和扩展,将原本难以理解的网状结构转换成相对简单的星形结构。
(2)可将各同事对象解耦,中介者模式有利于各同事之间的松耦合,可以独立地改变和复用每一个同事和中介者,增加新的中介者类和新的同事类都比较方便,更好地符合开闭原则。
(3)可以减少子类的生成,中介者模式将原本分布于多个对象间的行为集中在一起,改变这些行为只需生成新的中介者子类即可,这使得各个同事类可被重用,无须直接对同事类进行扩展。
2、缺点
(1)具体中介者子类中包含了大量的同事之间的交互细节,可能会导致具体中介者类非常复杂,使得系统难以维护。
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
设计模式
十七
中介
相关帖子
设计模式——六大原则
设计模式:简单工厂、工厂方法与抽象工厂
【Java】23种设计模式——14.模板方法模式
【设计模式】单例模式
【设计模式】工厂模式
【设计模式】外观模式
【工厂和策略设计模式妙用】解决接口选择与多重if-else 问题
没听说过设计模式?保姆级教程来了!
带团队后的日常思考(十七)
设计模式之单例模式
vip免费申请,1年只需15美金$
回复
使用道具
举报
提升卡
置顶卡
沉默卡
喧嚣卡
变色卡
千斤顶
照妖镜
相关推荐
业界
设计模式——六大原则
0
383
嗅叽
2025-06-09
业界
设计模式:简单工厂、工厂方法与抽象工厂
0
833
挫莉虻
2025-06-20
安全
【Java】23种设计模式——14.模板方法模式
0
147
郁梓馨
2025-06-20
业界
【设计模式】单例模式
0
377
嘀荼酴
2025-06-26
安全
【设计模式】工厂模式
0
283
恙髡
2025-06-26
业界
【设计模式】外观模式
0
163
盒礁泅
2025-06-27
业界
【工厂和策略设计模式妙用】解决接口选择与多重if-else 问题
0
882
匣卒
2025-07-08
安全
没听说过设计模式?保姆级教程来了!
0
413
涣爹卮
2025-07-09
业界
带团队后的日常思考(十七)
0
1133
后雪闵
2025-07-28
安全
设计模式之单例模式
0
77
颖顿庐
2025-09-03
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
|
立即注册
回复
本版积分规则
回帖并转播
回帖后跳转到最后一页
浏览过的版块
安全
签约作者
程序园优秀签约作者
发帖
裸历
2025-6-9 08:31:00
关注
0
粉丝关注
21
主题发布
板块介绍填写区域,请于后台编辑
财富榜{圆}
敖可
9984
杭环
9988
凶契帽
9988
4
氛疵
9988
5
黎瑞芝
9988
6
猷咎
9986
7
里豳朝
9986
8
肿圬后
9986
9
蝓俟佐
9984
10
虽裘侪
9984
查看更多