C#设计模式16——中介者模式的写法
是什么:
中介者模式是一种行为型设计模式,它定义了一个中介者对象来封装一系列对象之间的交互。中介者模式可以使得对象间的交互更加松耦合,避免了对象之间的直接依赖,从而使系统更加灵活、易于扩展和维护。
为什么:
中介者模式可以将系统中的对象之间的交互行为进行抽象,从而可以提高系统的可拓展性、可维护性和可读性。同时,它还可以降低系统的复杂度以及对象间的耦合度。
怎么做:
在中介者模式中,我们定义一个中介者接口,中介者负责协调一系列相关对象的交互,并将这些交互行为抽象为中介者接口中的方法。同时,我们还定义了一些相关对象,这些对象直接不再相互交互,而是通过中介者进行交互。相关对象可以保留对中介者的引用,以便于向中介者发送请求。
下面是一个在C#语言中实现中介者模式的示例:
// 中介者接口
public interface IMediator
{
void SendMessage(string message, Colleague colleague);
}
// 抽象同事类
public abstract class Colleague
{
protected IMediator mediator;
public Colleague(IMediator mediator)
{
this.mediator = mediator;
}
// 定义向中介者发送消息的方法
public void Send(string message)
{
mediator.SendMessage(message, this);
}
// 定义接收消息的方法(由子类实现)
public abstract void Receive(string message);
}
// 具体同事类 A
public class ConcreteColleagueA : Colleague
{
public ConcreteColleagueA(IMediator mediator) : base(mediator)
{
}
public override void Receive(string message)
{
Console.WriteLine("ConcreteColleagueA received message: " + message);
}
}
// 具体同事类 B
public class ConcreteColleagueB : Colleague
{
public ConcreteColleagueB(IMediator mediator) : base(mediator)
{
}
public override void Receive(string message)
{
Console.WriteLine("ConcreteColleagueB received message: " + message);
}
}
// 具体中介者类
public class ConcreteMediator : IMediator
{
private ConcreteColleagueA colleagueA;
private ConcreteColleagueB colleagueB;
public ConcreteMediator(ConcreteColleagueA colleagueA, ConcreteColleagueB colleagueB)
{
this.colleagueA = colleagueA;
this.colleagueB = colleagueB;
}
public void SendMessage(string message, Colleague colleague)
{
if (colleague == colleagueA)
{
colleagueB.Receive(message);
}
else
{
colleagueA.Receive(message);
}
}
}
在这个具体的实现中,我们定义了一个中介者接口 IMediator,以及一个抽象同事类 Colleague。Colleague 类中定义了向中介者发送消息的方法 Send() 和接收消息的方法 Receive(),并持有对中介者的引用。接下来,我们定义了两个具体同事类 ConcreteColleagueA 和 ConcreteColleagueB,它们分别实现了 Colleague 类中的 Receive() 方法。最后,我们定义了一个具体中介者类 ConcreteMediator,它持有对两个具体同事类的引用,并实现了 IMediator 接口中的 SendMessage() 方法。在 SendMessage() 方法中,根据接收消息者的不同,转发消息给对应的同事对象。
何时用:
中介者模式通常适用于以下场景:
1.当一个系统中对象之间的交互关系十分复杂,难以维护时,可以考虑采用中介者模式。
2.当一个系统中对象之间的交互是循环的,即对象之间互相引用时,可以考虑采用中介者模式。
3.当一个对象因为要和很多其他对象交互而导致其工作量过大时,可以考虑采用中介者模式。
4.当系统需要支持松耦合,易于维护和扩展时,可以考虑采用中介者模式。
C#设计模式16——中介者模式的写法的更多相关文章
- C#设计模式(16)——中介者模式
1.中介者模式介绍 中介者模式,定义了一个中介对象来封装一系列对象之间的交互关系,中介者使各个对象之间不需要显式地相互引用,从而降低耦合性.在开发中我们会遇到各个对象相互引用的情况,每个对象都可以和多 ...
- 乐在其中设计模式(C#) - 中介者模式(Mediator Pattern)
原文:乐在其中设计模式(C#) - 中介者模式(Mediator Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 中介者模式(Mediator Pattern) 作者:weba ...
- 折腾Java设计模式之中介者模式
博文原址:折腾Java设计模式之中介者模式 中介者模式 中介者模式(Mediator Pattern)是用来降低多个对象和类之间的通信复杂性.这种模式提供了一个中介类,该类通常处理不同类之间的通信,并 ...
- js设计模式——8.中介者模式
js设计模式——8.中介者模式 /*js设计模式——中介者模式*/ class A { constructor() { this.number = 0; } setNumber(num, m) { t ...
- 设计模式之中介者模式(Mediator)摘录
23种GOF设计模式一般分为三大类:创建型模式.结构型模式.行为模式. 创建型模式抽象了实例化过程.它们帮助一个系统独立于怎样创建.组合和表示它的那些对象.一个类创建型模式使用继承改变被实例化的类,而 ...
- 【GOF23设计模式】中介者模式
来源:http://www.bjsxt.com/ 一.[GOF23设计模式]_中介者模式.同事协作类.内部类实现 package com.test.mediator; /** * 同事类的接口 */ ...
- [设计模式] 17 中介者模式 Mediator Pattern
在GOF的<设计模式:可复用面向对象软件的基础>一书中对中介者模式是这样说的:用一个中介对象来封装一系列的对象交互.中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变 ...
- 再起航,我的学习笔记之JavaScript设计模式23(中介者模式)
中介者模式 概念介绍 中介者模式(Mediator):通过中介者对象封装一系列对象之间的交互,使对象之间不再相互引用降低他们之间的耦合,有时中介者对象也可以改变对象之间的交互. 创建一个中介 中介者模 ...
- 设计模式之中介者模式(Mediator )
中介者模式是关于数据交互的设计模式,该模式的核心是一个中介者对象,负责协调一系列对象之间的不同的数据请求,这一系列对象成为同事类.如房产中介(简直不想提它),买房的卖房的,租房的放租的都到房产中介那里 ...
- PHP设计模式系列 - 中介者模式
中介者模式 中介者模式用于开发一个对象,这个对象能够在类似对象相互之间不直接相互的情况下传送或者调解对这些对象的集合的修改.一般处理具有类似属性,需要保持同步的非耦合对象时,最佳的做法就是中介者模式. ...
随机推荐
- 24、Go语言中的OOP思想
1.是什么? OOP:面向对象 Go语言的解构体嵌套 1.模拟集成性:is - a type A struct { field } type B struct { A // 匿名字段 } 这种方式就会 ...
- SpringBoot-Validate优雅的实现参数校验,详细示例~
1.是什么? 它简化了 Java Bean Validation 的集成.Java Bean Validation 通过 JSR 380,也称为 Bean Validation 2.0,是一种标准化的 ...
- LeetCode132:分割回文串(DP、回文)
解题思路:有两个问点:1.如何快速当前字符串哪些的字串是回文:2.如何组合这些字串达到分割次数最少 针对问点1,可以开辟一个二维布尔数组 a[][],a[i][j]表示以索引i为起点,j为结束位置的字 ...
- 微服务网关限流&鉴权-wei-fu-wu-wang-guan-xian-liu--jian-quan
title: 微服务网关限流&鉴权 date: 2022-01-06 14:40:45.047 updated: 2022-01-06 14:40:45.047 url: https://ww ...
- DNSlog注入(利用DNSlog平台将SQL盲注变成回显注入)
前言 什么是UNC 什么是DNSlog注入 DNSlog注入的条件 防止DNSlog注入的几个措施 sqli-labs试验 前言 前几天面试的时候,面试官问我知不知道OOB(带外数据). 当时我蒙了, ...
- BUUCTF Web CyberPunk WriteUp
想直接查看payload的点这里 前言 二次注入(Second-Order Injection)是指攻击者在应用程序中注入恶意数据,然后在稍后的操作或不同的上下文中再次使用该恶意数据,导致安全漏洞.它 ...
- 面试官:禁用Cookie后Session还能用吗?
Cookie 和 Session 是 Web 应用程序中用于保持用户状态的两种常见机制,它们之间既有联系也有区别. Cookie 是由服务器在 HTTP 响应中发送给客户端(通常是浏览器)的一小段数据 ...
- 神经网络优化篇:理解mini-batch梯度下降法(Understanding mini-batch gradient descent)
理解mini-batch梯度下降法 使用batch梯度下降法时,每次迭代都需要历遍整个训练集,可以预期每次迭代成本都会下降,所以如果成本函数\(J\)是迭代次数的一个函数,它应该会随着每次迭代而减少, ...
- 云图说丨DDoS防护解决方案:DDoS大流量攻击防得住
摘要:华为云安全服务打造DDoS防护解决方案,助您防患于未然,筑牢业务安全防线. 本文分享自华为云社区<[云图说]第255期 DDoS防护解决方案:DDoS大流量攻击防得住>,作者:阅识风 ...
- MPU:鸿蒙轻内核的任务栈的溢出检察官
摘要:MPU(Memory Protection Unit,内存保护单元)把内存映射为一系列内存区域,定义这些内存区域的维洲,大小,访问权限和内存熟悉信息. 本文分享自华为云社区<鸿蒙轻内核M核 ...