C#设计模式:中介者模式(Mediator Pattern)
一,什么是中介者模式(Mediator Pattern)?
中介者模式(Mediator Pattern)是用来降低多个对象和类之间的通信复杂性。比如:如果我们实现两个人的交互,难道我们要定义两个对象如ChineseA,ChineseB和ChineseC,然后他们都一起说话聊天,我们要他们之间的交互改成他们和中介的交互实现聊天。在这里我们需要用到中介者设计模式,将交互的由将交互的形式有对象-对象转变为,对象-中介-对象的形式
二,如下代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace _17.中介者模式
{
//中介者模式适合用于多个对象之间紧密耦合的情况,紧密耦合的标准是:在类图中出现了蜘蛛网状结构。这有利于把蜘蛛网状结构梳理为星型结构,
//使原本复杂混乱的关系变得清晰简单
//用一个中介对象封装一系列的对象交互,中介者使各对象不需要显示地相互作用,从而使其耦合松散,而且可以独立的改变它们之间的交互。
//比如:如果我们实现两个人的交互,难道我们要定义两个对象如ChineseA,ChineseB和ChineseC,然后他们都一起说话聊天,
//我们要他们之间的交互改成他们和中介的交互实现聊天。在这里我们需要用到中介者设计模式,将交互的将交互的形式有对象-对象转变为,对象-中介-对象的形式
class Program
{
static void Main(string[] args)
{
People chinese1 = new Chinese()
{
Name = "中国人1"
}; People chinese2 = new Chinese()
{
Name = "中国人2"
}; People usa = new Usa()
{
Name = "美国人"
}; ////初始化要传递给谁的数据
Mediator mediator = new Mediator();
mediator.Addpeople(chinese1);
mediator.Addpeople(usa); ////中国人发送消息
mediator.SendMessage("聚餐啦啦啦啦!!", chinese2);
}
}
/// <summary>
/// 抽象类
/// </summary>
public abstract class People
{
public string Name { get; set; }
public abstract void SendMessage(string message, People peopleTo);
public abstract void GetMessage(string message, People peopleFrom);
}
/// <summary>
/// 中国人,具体实现类
/// </summary>
public class Chinese : People
{
public override void SendMessage(string message, People peopleTo)
{
Console.WriteLine("{0}说 {1}:{2}", base.Name, peopleTo.Name, message);
peopleTo.GetMessage(message, this);
} public override void GetMessage(string message, People peopleFrom)
{
Console.WriteLine("{0}get{1}:{2}", base.Name, peopleFrom.Name, message);
}
}
/// <summary>
/// 美国人,具体实现类
/// </summary>
public class Usa : People
{
public override void SendMessage(string message, People peopleTo)
{
Console.WriteLine("{0}说 {1}:{2}", base.Name, peopleTo.Name, message); peopleTo.GetMessage(message, this); } public override void GetMessage(string message, People peopleFrom)
{
Console.WriteLine("{0}get{1}:{2}", base.Name, peopleFrom.Name, message);
}
}
/// <summary>
/// 中介类
/// 比如一个通信平台,本来是中国人通知美国人的,现在是一个中介者通知所有人,解耦合
/// </summary>
public class Mediator
{
public string Name { get; set; }
private List<People> _peopleList = new List<People>(); public void Addpeople(People basepeople)
{
this._peopleList.Add(basepeople);
} /// <summary>
/// 群里面发消息的功能
/// </summary>
/// <param name="message"></param>
/// <param name="peopleFrom"></param>
public void SendMessage(string message, People peopleFrom)
{
Console.WriteLine("{0}Send:{1}", peopleFrom.Name, message);
foreach (var item in this._peopleList)
{
item.GetMessage(message, peopleFrom);
}
}
}
}
C#设计模式:中介者模式(Mediator Pattern)的更多相关文章
- 23种设计模式--中介者模式-Mediator Pattern
一.中介者模式的介绍 中介者模式第一下想到的就是中介,房子中介,婚姻中介啊等等,当然笔者也希望来个婚姻中介给我介绍一个哈哈哈,,回归正题中介者模式分成中介者类和用户类,根据接口编程的方式我们再 ...
- 乐在其中设计模式(C#) - 中介者模式(Mediator Pattern)
原文:乐在其中设计模式(C#) - 中介者模式(Mediator Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 中介者模式(Mediator Pattern) 作者:weba ...
- 设计模式系列之中介者模式(Mediator Pattern)——协调多个对象之间的交互
说明:设计模式系列文章是读刘伟所著<设计模式的艺术之道(软件开发人员内功修炼之道)>一书的阅读笔记.个人感觉这本书讲的不错,有兴趣推荐读一读.详细内容也可以看看此书作者的博客https:/ ...
- 二十四种设计模式:中介者模式(Mediator Pattern)
中介者模式(Mediator Pattern) 介绍用一个中介对象来封装一系列的对象交互.中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互. 示例有一个Messa ...
- 中介者模式(Mediator Pattern)
用于减少多个对象或类之间的通信复杂性. 此模式提供了一个中介类,它通常处理不同类之间的所有通信,并支持通过松散耦合来维护代码.中介者模式属于行为模式类别. 实现实例 在这里通过一个聊天室的示例来演示中 ...
- [设计模式] 17 中介者模式 Mediator Pattern
在GOF的<设计模式:可复用面向对象软件的基础>一书中对中介者模式是这样说的:用一个中介对象来封装一系列的对象交互.中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变 ...
- 4.7 《硬啃设计模式》 第24章 麻烦的多角关系 - 中介者模式(Mediator Pattern)简介
在Windows程序中,有时候界面控件之间的交互会很麻烦,如:A控件显示什么的时候,B控件要显示什么,另外C控件要不可用,同样其它控件也会有类似的复杂要求.控件与控件之间很容易形成复杂的多角关系了.现 ...
- 18.中介者模式(Mediator Pattern)
using System; namespace Test { class Program { /// <summary> /// 中介者模式,定义了一个中介对象来封装一系列对象之间的交互关 ...
- 设计模式-中介者模式(Mediator)
场景分析: 众所周知,电脑有很多组成部分,如硬盘.内存.光驱.音频.键盘等,各个组件之间协同工作才能保证电脑的正常运行. 如果各个组件之间直接交互,可能会比较复杂,如下图: 将上面的各个组件抽象成类, ...
- 大话设计模式--中介者模式 Mediator --C++实现实例
1. 中介者模式: 用一个中介对象来封装一系列的对象交互,中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立改变他们之间的交互. Mediator的出现减少了各个Colleague的耦 ...
随机推荐
- CommandLineRunner接口
一.首先创建一个MyCommandLineRunner类实现CommandLineRunner接口 @Commponent把pojo注册到spring容器中 @Order(2)这个数越小优先级 ...
- 完美解决linux不能编辑sshd_cofig和实现xshell远程连接的问题
第一步:我们使用命令行vim /etc/ssh/sshd_config 执行修改,强制保持 :wq! 系统不让我们修改这个文件 "/etc/ssh/sshd_config" ...
- docker安装禅道
一.下载地址 禅道开源版: http://dl.cnezsoft.com/zentao/docker/docker_zentao.zip 数据库用户名: root,默认密码: 123456.运行时 ...
- Altera培训SignalTap II的使用--笔记
培训的内容有点多(啰嗦)(笔记为截图) 听课笔记:Altera培训SignalTap II的使用--笔记
- CityMaker SDK与三维GIS城市
https://wenku.baidu.com/view/abc2a32f01f69e3142329426.html https://blog.csdn.net/weixin_38476447/art ...
- Spring Cloud教程(九)应用程序上下文服务
Spring Boot对于如何使用Spring构建应用程序有一个看法:例如它具有常规配置文件的常规位置,以及用于常见管理和监视任务的端点.Spring Cloud建立在此之上,并添加了一些可能系统中所 ...
- [CSP-S模拟测试]:幻魔皇(数学)
题目描述 幻魔皇拉比艾尔很喜欢斐波那契树,他想找到神奇的节点对. 所谓斐波那契树,根是一个白色节点,每个白色节点都有一个黑色节点儿子,而每个黑色节点则有一个白色和一个黑色节点儿子.神奇的节点对则是指白 ...
- svn 服务器操作
mkdir /var/svn/svnrepos/aaasvnadmin create /var/svn/svnrepos/aaasvnserve -d -r /var/svn/svnrepos #启动 ...
- 【adb真机查Log】Android Studio 3.X 找不到Android Device Monitor
参考来源:https://blog.csdn.net/yuanxiang01/article/details/80494842 以下信息来源于Android Developers官网 Android设 ...
- 【opencv使用笔记】一:Python版本安装与测试
安装完opencv3.4.1并且Cmake后,发现Python不能import,又装了Python版本的opencv; 由于是在conda环境下安装,opencv-python-4.0.1.24,最终 ...