定义:用一个中介对象来封装一系列的对象交互。

中介者使各对象不须要显式地相互引用。从而使其耦合松散,并且能够独立地改变它们之间的交互。

适用地方:中介者模式一般应用于一组对象以定义良好可是复杂的方式进行通信的场合以及想定制一个分布在多个类中的行为,而又不想生成太多的子类的场合。

长处:中介者的出现降低了各个对象的耦合,使得能够独立地改变和复用各个对象类和中介类,比方不论什么国家的改变不会影响到其它国家,而仅仅是与安理会发生变化。其次,因为把对象怎样写作进行了抽象,将中介作为一个独立的概念并将其封装在一个对象中。这样关注的对象就从对象各自本身的行为转移到它们之间的交互上来,也就是站在一个更宏观的角度上看待系统。比方巴以冲突。本来仅仅能算是国与国之间的矛盾,因此各自的看法可能都比較狭隘,但站在联合国安理会的角度,就能够从全球化、也更客观角度来看待这个问题。在调停和维和上作出贡献。

缺点:因为中介者控制了集中化。于是就把交互复杂性变为了中介者的复杂性。这就使得中介者会变得比不论什么一个对象都复杂。
结构图:


基本代码:

using System;
using System.Collections.Generic;
using System.Text;

namespace 中介者模式
{
    class Program
    {
        static void Main(string[] args)
        {
            ConcreteMediator m = new ConcreteMediator();

ConcreteColleague1 c1 = new ConcreteColleague1(m);
            ConcreteColleague2 c2 = new ConcreteColleague2(m);

m.Colleague1 = c1;
            m.Colleague2 = c2;

c1.Send("吃过饭了吗?");
            c2.Send("没有呢,你打算请客?");

Console.Read();
        }
    }

abstract class Mediator
    {
        public abstract void Send(string message, Colleague colleague);
    }

class ConcreteMediator : Mediator
    {
        private ConcreteColleague1 colleague1;
        private ConcreteColleague2 colleague2;

public ConcreteColleague1 Colleague1
        {
            set { colleague1 = value; }
        }

public ConcreteColleague2 Colleague2
        {
            set { colleague2 = value; }
        }

public override void Send(string message, Colleague colleague)
        {
            if (colleague == colleague1)
            {
                colleague2.Notify(message);
            }
            else
            {
                colleague1.Notify(message);
            }
        }
    }

abstract class Colleague
    {
        protected Mediator mediator;

public Colleague(Mediator mediator)
        {
            this.mediator = mediator;
        }
    }

class ConcreteColleague1 : Colleague
    {
        public ConcreteColleague1(Mediator mediator)
            : base(mediator)
        {

}

public void Send(string message)
        {
            mediator.Send(message, this);
        }

public void Notify(string message)
        {
            Console.WriteLine("同事1得到信息:" + message);
        }
    }

class ConcreteColleague2 : Colleague
    {
        public ConcreteColleague2(Mediator mediator)
            : base(mediator)
        {
        }

public void Send(string message)
        {
            mediator.Send(message, this);
        }

public void Notify(string message)
        {
            Console.WriteLine("同事2得到信息:" + message);
        }
    }
}

转载于:https://www.cnblogs.com/wzzkaifa/p/7367442.html

中介者模式分析、结构图及基本代码相关推荐

  1. 设计模式(17)----中介者模式

    中介者模式 中介在现实生活中并不陌生,满大街的房屋中介.良莠不齐的出国中介--.它们的存在是因为它们能给我们的生活带来一些便利:租房.买房用不着各个小区里瞎转:出国留学也不用不知所措.中介者模式在程序 ...

  2. 设计模式之中介者模式(Mediator)摘录

    23种GOF设计模式一般分为三大类:创建型模式.结构型模式.行为模式. 创建型模式抽象了实例化过程,它们帮助一个系统独立于如何创建.组合和表示它的那些对象.一个类创建型模式使用继承改变被实例化的类,而 ...

  3. Python设计模式-中介者模式

    Python设计模式-中介者模式 代码基于3.5.2,代码如下; #coding:utf-8 #中介者模式class colleague():mediator = Nonedef __init__(s ...

  4. 漫说中介者模式--创业公司成长记

    1. 中介者进化 一个公司,开始时大家都是平等关系的,例如ABC三人. 开始,公司很小,他们都是多面手,每个人既做生产,也做销售,也做运输. 如下图所示: 随着生意越来越好,公司规模变大,然后他们就发 ...

  5. 设计模式之中介者模式(mediator模式)

    引入中介者模式 中介者模式实例 中介者模式分析 引入中介者模式 大家想象一下有十个人要共同完成一个工作,他们要互相合作和沟通,并且根据对方的通知可能要改变自己的状态,但这通常会带来很多问题,流程过于复 ...

  6. 协调多个对象之间的交互——中介者模式

    本文转载自 :http://blog.csdn.net/lovelion/article/details/8482952 腾讯公司推出的QQ作为一款免费的即时聊天软件深受广大用户的喜爱,它已经成为很多 ...

  7. Net设计模式实例之中介者模式(Mediator Pattern)

    一.中介者模式简介(Brief Introduction) 中介者模式(Mediator Pattern),定义一个中介对象来封装系列对象之间的交互.中介者使各个对象不需要显示地相互引用,从而使其耦合 ...

  8. 二手房中介管理系统设计

    目录 数据库应用项目开发课程设计报告 二手房中介管理系统设计与管理 一.二手房中介管理系统需求分析 1.系统概述 2.系统功能设想 二.二手房中介管理系统概念设计 1.实体 2. 系统局部E-R图 3 ...

  9. 设计模式(十四)中介者模式

    相关文章 设计模式(一)设计六大原则 设计模式(二)单例模式的七种写法 设计模式(三)建造者模式 设计模式(四)简单工厂模式 设计模式(五)观察者模式 设计模式(六)代理模式 设计模式(七)装饰模式 ...

最新文章

  1. PHP使用APNS的 feedback service
  2. GAN是一种特殊的损失函数?
  3. 学一点 mysql 双机异地热备份----快速理解mysql主从,主主备份原理及实践
  4. nginx 及 php 配置
  5. QT开发(六十六)——登录对话框的验证机制
  6. ansible命令参数介绍
  7. idea插件导出_Intellij IDEA 中我一直在用的几个插件
  8. java怎么递归_Java的递归、如何与流相结合
  9. coco数据集大小分类_Microsoft COCO 数据集
  10. mysql mgr CONSuL_Mysql MGR + Consul + Consul-template + Haproxy 搭建mysql 高可用集群 (三)...
  11. LeetCode二分法---C语言
  12. python程序可以在任何安装了解释器_Windows安装多个python解释器
  13. 写给大家看的设计模式
  14. block才会执行 mono_Monogb基本概念及基本操作
  15. 解析信号与希尔伯特变换
  16. java社交框架,java毕业设计_springboot框架的社交平台
  17. java 蔡学镛_蔡学镛谈“Linux + Java 会得到什么”
  18. APICloud 原生模块、H5模块、多端组件使用教程
  19. 劳动保障职业学院计算机专业,北京劳动保障职业学院2020录取分数线(附2017-2020年分数线)...
  20. 开发人员常用工具最全锦集(持续更新)

热门文章

  1. lock和synchronized的同步区别与选择
  2. SqlServerDBHelper类
  3. 跨平台加密版 SQLite 3 - wxSQLite3
  4. tensorflow gpu windows配置步骤教学
  5. CSS设计指南(读书笔记 - 背景)
  6. 【效率专精系列】善用API统一描述语言提升RestAPI开发效率
  7. 《游戏设计师修炼之道:数据驱动的游戏设计》一3.8小结
  8. apk,task,进程区别
  9. Portal-Basic Java Web 应用开发框架:应用篇(十四) —— 异步 Action
  10. 各个行业纷纷瞅准了这块大蛋糕