• 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(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;
        }
    }
    /// <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 * 200 + 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);
        }
    }
  • 相关阅读:
    json字符串与java对象的相互转换(jackson)
    EventBus的使用
    android 定时任务
    使用FlaycoBanner实现图片轮播效果(加载网络图片)
    okHttp使用
    Android 终于官方支持按百分比来设置控件的宽高了
    Android下使用Properties文件保存程序设置
    google vr开源 cardboard
    Android开源控件PhotoView的使用
    Android 布局优化
  • 原文地址:https://www.cnblogs.com/lk95/p/9992741.html
Copyright © 2020-2023  润新知