中介者模式

中介者模式,定义了一个中介对象来封装一系列对象之间的交互关系。中介者使各个对象之间不需要显式地相互引用,从而使耦合性降低,而且可以独立地改变它们之间的交互行为。

结构: 中介者模式设计两个具体对象,一个是用户类,另一个是中介者类,根据针对接口编程原则,则需要把这两类角色进行抽象,所以中介者模式中就有了4类角色,它们分别是:抽象中介者角色,具体中介者角色、抽象同事类和具体同事类。中介者类是起到协调各个对象的作用,则抽象中介者角色中则需要保存各个对象的引用。

优点: 1、降低了类的复杂度,将一对多转化成了一对一。 2、各个类之间的解耦。 3、符合迪米特原则。

缺点:中介者会庞大,变得复杂难以维护。

使用场景: 1、系统中对象之间存在比较复杂的引用关系,导致它们之间的依赖关系结构混乱而且难以复用该对象。 2、想通过一个中间类来封装多个类中的行为,而又不想生成太多的子类。

例子: 生活中男女相亲对象提供自己的信息给媒婆,媒婆将各个对象提供的信息分别提供给需要的对象

,这里 媒婆就是中介者,相亲的每个人就是对象

下面可以通过图片进行理解

下面通过脚本来对一对男女进行相亲信息的处理

using System.Collections;
using System.Collections.Generic;
using UnityEngine; public class MediatorTest : MonoBehaviour { // Use this for initialization
void Start () {
Matcher liGouDan = new Man(,,,);
Matcher cuiHua = new Women(,,,); WomenMatchMaker womenMatchMaker = new WomenMatchMaker(liGouDan ,cuiHua);
womenMatchMaker.OfferManInformation();
womenMatchMaker.OfferWoManInformation();
}
// Update is called once per frame
void Update () {
}
}
public abstract class Matcher
{ //这里为了方便处理,全部采用了int类型
public int mAge;//年龄
public int mMoney;//财富值
public int mFamilyBG;//家庭背景 public int mFavor;//好感度
public Matcher(int age,int money,int familuBG,int favor)
{
mAge = age;
mMoney = money;
mFamilyBG = familuBG;
mFavor = favor;
}
}
/// <summary>
/// 男性
/// </summary>
public class Man : Matcher
{
public Man(int age, int money, int familuBG, int favor) : base(age,money,familuBG,favor)
{ }
}
/// <summary>
/// 女性
/// </summary>
public class Women : Matcher
{
public Women(int age, int money, int familuBG, int favor) : base(age, money, familuBG, favor)
{ }
}
/// <summary>
/// 媒婆
/// </summary>
public class WomenMatchMaker
{
private Matcher mMan;
private Matcher mWomen; public WomenMatchMaker(Matcher man,Matcher women)
{
mMan = man;
mWomen = women;
}
/// <summary>
/// 男方信息
/// </summary>
public void OfferManInformation()
{
mWomen.mFavor = -mWomen.mAge * + mWomen.mMoney + mWomen.mFamilyBG;
Debug.Log("把男生信息提供给女孩之后,女孩的好感度:" + mWomen.mFavor);
}
/// <summary>
/// 男方信息
/// </summary>
public void OfferWoManInformation()
{
mMan.mFavor = mMan.mAge + mMan.mMoney + mMan.mFamilyBG;
Debug.Log("把女孩信息提供给男生之后,男生的好感度:" + mMan.mFavor);
}
}

C# 中介者模式的更多相关文章

  1. 23种设计模式--中介者模式-Mediator Pattern

    一.中介者模式的介绍     中介者模式第一下想到的就是中介,房子中介,婚姻中介啊等等,当然笔者也希望来个婚姻中介给我介绍一个哈哈哈,,回归正题中介者模式分成中介者类和用户类,根据接口编程的方式我们再 ...

  2. MediatorPattern(中介者模式)

    /** * 中介者模式 * @author TMAC-J * 研究了这么多设计模式,觉得无非就是几点: * 1.若两个类有耦合关系,设立一个中间类,处理两个类的关系,把两个类的耦合降低 * 2.面向接 ...

  3. C#设计模式-中介者模式

    在现实生活中,有很多中介者模式的身影,例如QQ游戏平台,聊天室.QQ群和短信平台,这些都是中介者模式在现实生活中的应用,下面就具体分享下我对中介者模式的理解. 一. 中介者(Mediator)模式 从 ...

  4. php实现设计模式之 中介者模式

    <?php /* * 中介者模式:用一个中介对象来封装一系列的对象交互,使各对象不需要显式地相互引用从而使其耦合松散,而且可以独立地改变它们之间的交互 */ /* * 以一个同学qq群为例说明, ...

  5. 轻松掌握:JavaScript代理模式、中介者模式

    代理模式.中介者模式 代理模式 在面向对象设计中,有一个单一职责原则,指就一个类(对象.函数)而言,应该仅有一个引起它变化的原因.如果一个对象承担了过多的职责,就意味着它将变得巨大,引起它变化的原因就 ...

  6. java设计模式之中介者模式

    中介者模式 用一个中介对象来封装一系列的对象交互.中介者使各个对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互. 中介者模式UML图 中介者模式代码 package com ...

  7. 中介者模式(Mediator Pattern)

    定义一个中介对象来封装系列对象之间的交互.中介者使各个对象不需要显示地相互引用,从而使其耦合性松散,而且可以独立地改变他们之间的交互. Mediator:中介者接口.在里面定义了各个同事之间相互交互所 ...

  8. C++设计模式-Mediator中介者模式

    Mediator中介者模式作用:用一个中介对象来封装一系列的对象交互.中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互. UML如下: Colleage抽象同事类 ...

  9. JAVA 设计模式 中介者模式

    用途 中介者模式 (Mediator) 用一个中介对象来封装一系列的对象交互.中介者使各对象不需要显示地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互. 中介者模式是一种行为型模式. 结 ...

  10. (七)中介者模式-C++实现

    用一个中介对象来封装一系列的对象交互.中介者使各对象不需要显示地相互引用,从而使其解耦合松散而且可以独立地改变他们之间的交互. 中介者模式适合于 系统中不希望对象之间直接交互,即不希望类之间相互包含, ...

随机推荐

  1. jupyter- 运维

    jupyter运维常见CLI 查看安装的内核和位置 jupyter kernelspec list anaconda列出所有的环境 conda info -e

  2. linux应用之ntpdate命令联网同步时间

    当Linux服务器的时间不对的时候,可以使用ntpdate工具来校正时间. 安装:yum install ntpdate ntpdate简单用法: # ntpdate ip # ntpdate 210 ...

  3. cin.get(),cin.getline(),getline(),gets(),getchar()

    1.cin.get() (1).cin.get()-------提取单个字符,可以提取回车.空格 a=cin.get(); (2) 同(1)---------------提取单个字符,可以提取回车.空 ...

  4. POJ 2421 Constructing Roads(Kruskal算法)

    题意:给出n个村庄之间的距离,再给出已经连通起来了的村庄.求把所有的村庄都连通要修路的长度的最小值. 思路:Kruskal算法 课本代码: //Kruskal算法 #include<iostre ...

  5. 浏览器对应的selenium版本问题

    在selenium+python环境下查看selenium版本方法: cmd下输入:pip show selenium 卸载selenium版本: cmd下输入:pip uninstall selen ...

  6. windows 7下mingw+msys编译ffmpeg

      windows 7下mingw+msys编译ffmpeg   1-->下载安装MingW,mingw-get-inst-20120426.exe  http://sourceforge.ne ...

  7. ffmpeg推流命令参数记录

    列出我们本机的设备:ffmpeg -list_devices true -f dshow -i dummy .\ffmpeg -r 25 -f dshow -s 640*480 -i video=&q ...

  8. 【LeetCode】010. Regular Expression Matching

    Implement regular expression matching with support for '.' and '*'. '.' Matches any single character ...

  9. Unity3D中的Coroutine及其使用(延时、定时调用函数)

    http://blog.csdn.net/nizihabi/article/details/47606887 一.Coroutine(协程)的概念和本质 在网上的一些资料当中,一直将Coroutine ...

  10. 命令行启动nodejs方式 小总结

    之前启动nodejs都是写一个命令行文件,如nodejs.cmd,内容为:start node E:\node\app.js. 今天突然想到之前也用过另外一种方式启动,就是在命令行通过cd命令先找到n ...