C# 中介者模式
中介者模式
中介者模式,定义了一个中介对象来封装一系列对象之间的交互关系。中介者使各个对象之间不需要显式地相互引用,从而使耦合性降低,而且可以独立地改变它们之间的交互行为。
结构: 中介者模式设计两个具体对象,一个是用户类,另一个是中介者类,根据针对接口编程原则,则需要把这两类角色进行抽象,所以中介者模式中就有了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# 中介者模式的更多相关文章
- 23种设计模式--中介者模式-Mediator Pattern
一.中介者模式的介绍 中介者模式第一下想到的就是中介,房子中介,婚姻中介啊等等,当然笔者也希望来个婚姻中介给我介绍一个哈哈哈,,回归正题中介者模式分成中介者类和用户类,根据接口编程的方式我们再 ...
- MediatorPattern(中介者模式)
/** * 中介者模式 * @author TMAC-J * 研究了这么多设计模式,觉得无非就是几点: * 1.若两个类有耦合关系,设立一个中间类,处理两个类的关系,把两个类的耦合降低 * 2.面向接 ...
- C#设计模式-中介者模式
在现实生活中,有很多中介者模式的身影,例如QQ游戏平台,聊天室.QQ群和短信平台,这些都是中介者模式在现实生活中的应用,下面就具体分享下我对中介者模式的理解. 一. 中介者(Mediator)模式 从 ...
- php实现设计模式之 中介者模式
<?php /* * 中介者模式:用一个中介对象来封装一系列的对象交互,使各对象不需要显式地相互引用从而使其耦合松散,而且可以独立地改变它们之间的交互 */ /* * 以一个同学qq群为例说明, ...
- 轻松掌握:JavaScript代理模式、中介者模式
代理模式.中介者模式 代理模式 在面向对象设计中,有一个单一职责原则,指就一个类(对象.函数)而言,应该仅有一个引起它变化的原因.如果一个对象承担了过多的职责,就意味着它将变得巨大,引起它变化的原因就 ...
- java设计模式之中介者模式
中介者模式 用一个中介对象来封装一系列的对象交互.中介者使各个对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互. 中介者模式UML图 中介者模式代码 package com ...
- 中介者模式(Mediator Pattern)
定义一个中介对象来封装系列对象之间的交互.中介者使各个对象不需要显示地相互引用,从而使其耦合性松散,而且可以独立地改变他们之间的交互. Mediator:中介者接口.在里面定义了各个同事之间相互交互所 ...
- C++设计模式-Mediator中介者模式
Mediator中介者模式作用:用一个中介对象来封装一系列的对象交互.中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互. UML如下: Colleage抽象同事类 ...
- JAVA 设计模式 中介者模式
用途 中介者模式 (Mediator) 用一个中介对象来封装一系列的对象交互.中介者使各对象不需要显示地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互. 中介者模式是一种行为型模式. 结 ...
- (七)中介者模式-C++实现
用一个中介对象来封装一系列的对象交互.中介者使各对象不需要显示地相互引用,从而使其解耦合松散而且可以独立地改变他们之间的交互. 中介者模式适合于 系统中不希望对象之间直接交互,即不希望类之间相互包含, ...
随机推荐
- Mysql的链接超时异常CommunicationsException
原文是在博客上的:小重合之旅 链接如下:未经过作者同意,这里注明下. http://blog.csdn.net/bluesnail216/article/details/15810119 1,问题现象 ...
- 在javascript中使用replace
javascript中使用replace功能很强大,不仅可以替换为字符串,还可以利用正则表达式,对匹配到的字符串为所欲为的进行操作,首先我们来了解一下replace的基本语法 定义和用法 replac ...
- C++STL 常用 函数 用法(转)
http://www.cnblogs.com/duoduo369/archive/2012/04/12/2439118.html 迭代器(iterator) 个人理解就是把所有和迭代有关的东西给抽象出 ...
- mybatis学习第(二)天
Mybatis第二天 高级映射 查询缓存 关于与spring的整合和反转工程我偷懒了,下次看. 使用的sql: CREATE TABLE USER( id INT PRIMARY KEY A ...
- 在程序中对ArrayList进行排序,并剔除重复元素
import java.util.*; class sortDemo { public static void main(String[] args) { ArrayList<Object> ...
- @@cursor_rows变量解析
刚刚看了@@curosr_rows这个全局变量,发现这个变量挺有意思.要懂得这个变量的意义,基本上牵扯到cursor一些比较容易忽视的内容. @@cursor_rows是用来记录当前游标的数量,也就从 ...
- 错误名称:Uncaught SyntaxError: Unexpected identifier
控制台输出: 1.谷歌:Uncaught SyntaxError: Unexpected identifier 2.火狐:SyntaxError: missing ] after element li ...
- 【LeetCode】033. Search in Rotated Sorted Array
题目: Suppose an array sorted in ascending order is rotated at some pivot unknown to you beforehand. ( ...
- 深入V8引擎-枚举+位运算实现参数配置
不知不觉都快月底了,看了看上一篇还是6号写的,惭愧惭愧,说好的坚持.为了证明没有偷懒(其实还是沉迷了一会dota2),先上一个图自证清白. 基本上从初始化引擎,到Isolate.handleScope ...
- Oracle 12c 多租户 手工创建 pdb 与 手工删除 pdb
实验环境: SQL> select * from v$version;BANNER ...