博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C# 中介者模式
阅读量:5875 次
发布时间:2019-06-19

本文共 2310 字,大约阅读时间需要 7 分钟。

中介者模式

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

结构: 中介者模式设计两个具体对象,一个是用户类,另一个是中介者类,根据针对接口编程原则,则需要把这两类角色进行抽象,所以中介者模式中就有了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(52,10000000,20000,0);        Matcher cuiHua = new Women(20,3000,3000000,0);        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;    }}/// /// 男性/// public class Man : Matcher{    public Man(int age, int money, int familuBG, int favor) : base(age,money,familuBG,favor)    {    }}/// /// 女性/// public class Women : Matcher{    public Women(int age, int money, int familuBG, int favor) : base(age, money, familuBG, favor)    {    }}/// /// 媒婆/// public class WomenMatchMaker{    private Matcher mMan;    private Matcher mWomen;    public WomenMatchMaker(Matcher man,Matcher women)    {        mMan = man;        mWomen = women;    }    ///     /// 男方信息    ///     public void OfferManInformation()    {        mWomen.mFavor = -mWomen.mAge * 200 + mWomen.mMoney + mWomen.mFamilyBG;        Debug.Log("把男生信息提供给女孩之后,女孩的好感度:" + mWomen.mFavor);    }    ///     /// 男方信息    ///     public void OfferWoManInformation()    {        mMan.mFavor = mMan.mAge + mMan.mMoney + mMan.mFamilyBG;        Debug.Log("把女孩信息提供给男生之后,男生的好感度:" + mMan.mFavor);    }}

 

转载于:https://www.cnblogs.com/lk95/p/9992741.html

你可能感兴趣的文章
详解Linux中Load average负载
查看>>
HTTP 协议 Cache-Control 头——性能啊~~~
查看>>
丢包补偿技术概述
查看>>
PHP遍历文件夹及子文件夹所有文件
查看>>
WinForm程序中两份mdf文件问题的解决
查看>>
【转】唯快不破:创业公司如何高效的进行产品研发管理
查看>>
Spark RDD、DataFrame原理及操作详解
查看>>
程序计数器、反汇编工具
查看>>
Android N: jack server failed
查看>>
007-Shell test 命令,[],[[]]
查看>>
关于Linux系统使用遇到的问题-1:vi 打开只读(readonly)文件如何退出保存?
查看>>
pandas 按照某一列进行排序
查看>>
在WPF中如何使用RelativeSource绑定
查看>>
Map的深浅拷贝的探究
查看>>
XSLT语法 在.net中使用XSLT转换xml文档示例
查看>>
如何将lotus 通讯簿导入到outlook 2003中
查看>>
WinForm 应用程序中开启新的进程及控制
查看>>
前端工程师的职业发展路线在哪?
查看>>
IOS 内存警告 Memory warning level
查看>>
[转]PAC Manager: Ubuntu 上强大的 SSH 帐号管理工具,可取代 SecureCRT_Miracle_百度空间...
查看>>