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

设计模式-中介者模式

概述

中介者模式也是一种行为型的设计模式其主要的是通过一个中介者代替代对象之间的通信,减少类于类之间的依赖,从而减少代码耦合中介者模式有几个主要的组成部分,中介者接口,中介者,通信类当需要通信的时候,通过中介者将具体的信息传到需要传递的类中,实现类于类之间的通信。


例子:在两个城市中,有小明和小红两个笔友,由于距离比较远,两个人没法直接通信,所以需要邮差(中介者)将消息传递给对方,请设计实现。

中介者模式

using static POC;
using System.Numerics;internal class Program
{private static void Main(string[] args){XiaoMing xiaoming = new XiaoMing();XiaoHong xiaohong = new XiaoHong();PostMan PM = new PostMan(xiaoming, xiaohong);//创建中介者xiaohong.Mail();//小红寄出了邮件xiaoming.Mail();//小明寄出了邮件}public interface IMediator{void Notify(IMediator sender, string name);}public class PostMan : IMediator//邮差{private readonly XiaoMing _xiaoming;private readonly XiaoHong _xiaohong;public PostMan(XiaoMing XM, XiaoHong XH){_xiaoming = XM;_xiaohong = XH;_xiaoming.SetMediator(this);_xiaohong.SetMediator(this);}public void Notify(IMediator sender, string name){if (name == "xiaohong"){_xiaohong.Message("通知小红,小明寄出了邮件");}else if (name == "xiaoming"){_xiaoming.Message("通知小明,小红寄出了邮件");}}}public abstract class User//用户基类{protected IMediator _mediator;public void SetMediator(IMediator mediator){_mediator = mediator;}public abstract void Mail();public abstract void Message(string message);}public class XiaoMing : User//用户小明{public override void Mail(){_mediator.Notify(_mediator, "xiaohong");}public override void Message(string message){Console.WriteLine(message);}}public class XiaoHong : User//用户小红{public override void Mail(){_mediator.Notify(_mediator, "xiaoming");}public override void Message(string message){Console.WriteLine(message);}}
}

输出

通知小明,小红寄出了邮件
通知小红,小明寄出了邮件


http://www.mrgr.cn/news/1836.html

相关文章:

  • Monaco Editor组件使用详解
  • 记录一次搭建uniapp-vue3的基础项目
  • HCIE冲刺-----------论述解析
  • 【音视频 | YUV格式】深入理解 YUV 数据格式,一文弄懂
  • 双向链表复习(C语言版)
  • Kotlin 语法
  • PHP正则替换字符串中的图片地址
  • 聊聊适配器模式
  • C++求职LinuxWebServer面试篇(项目介绍)
  • WebGL 入门:开启三维网页图形的新篇章(上)
  • 【Linux网络】Socket套接字编写UDP实现网络通信LinuxWindows跨平台通信
  • 基于springboot技术的美食烹饪互动平台的设计与实现
  • 亚马逊云科技产 Amazon Neptune 图数据库服务体验
  • 数据库设计规范
  • linux 文件系统和日志分析
  • mysql 之 explain
  • 优先级队列的实现
  • 个人理解—MKCONFIG的常用配置参数与链接脚本
  • 動態PPTP代理IP是什麼?
  • k8s之HPA