设计模式 之 中介者模式 //用游戏中的例子解释设计模式

中介者模式(Mediator 是用来降低各同事类相互调用所产生的耦合性,最经典的例子就是MVCM Model模型层,V View视图层,C Controller控制层,C是M和V的中介者
  • 什么是中介者模式/它有什么用?

        举个栗子

        玩过手机游戏 或者PC游戏的 曾游戏玩家们(老夫看你骨骼精奇,我知道,在你当程序员之前,一定是一个爱玩游戏的傻小子吧再见),你们应该都知道游戏里的喇叭道具吧,道具的效果是:购买此道具的玩家可以使用一次“给全部玩家发送一次信息的权限”,就像这样————

        那么  请问!!疑问

        使用此道具的玩家的客户端是如何发送讯息的呢?其他玩家又是如何看到讯息的

        难道是使用此道具的玩家客户端直接访问其他玩家的客户端,然后在他们的显示器上抠字吗??奋斗

          当然不是,如果真的像刚才我说的那样的话,使用此道具的玩家的客户端上必须存有全部其他玩家的地址信息,并且当使用此道具的玩家点击发送讯息时,必须在极快的时间内调用全部其他客户端上的显示信息的函数,然后你的电脑就会因为工作量太大而爆炸。。。这种方法显然很扯淡

        正常的方式是:客户端调用自身的,向服务器上的发送讯息的函数,然后由服务器调用其他客户端上的显示信息函数,这样的话喇叭效果就完成了

    这,就叫中介者模式

    那,有什么用呢?降低程序的耦合性,当某个玩家删号的时候(不再使用某个同事时),不会影响到其他人。总之,你想让某个类容易被移植到别的位置,就用吧(把它写成同事,千万别傻傻的把它写成中介者)。

  • 中介者模式的核心写法/如何写一个中介者模式?

        1、写出中介者模式(Mediator)(这里我是用接口写的) 以及同事类(Colleague)的抽象层

        /// <summary>
        /// 抽象同事类
        /// </summary>
        public abstract class Colleague
        {
            protected IMediator mediator;
            /// <summary>
            /// 步骤3 同事类的构造函数主要功能 是让同事认识中介者
            /// </summary>
            /// <param name="mediator">给自身的中介者实例赋值</param>
            public Colleague(IMediator mediator)
            {
                this.mediator = mediator;
            }
            /// <summary>
            /// 给留给中介者调用的方法
            /// </summary>
            public abstract void labaJieshou接收喇叭消息(string Message);
        }
        /// <summary>
        /// 抽象中介者层  中介者类不会主动调用其它同事类 只会在其他同事类申请调用的时候,中介者才会干活
        /// </summary>
        public interface IMediator
        {
            void SendMassge向其他同事发送信息(string str, Colleague colleague发送者);
        }

        2、实现步骤1;

        /// <summary>
        /// 实体同事A
        /// </summary>
        public class ColleagueConcreateA : Colleague
        {
            
            public ColleagueConcreateA(IMediator mediator) : base(mediator)
            {
            }
            /// <summary>
            /// 调用中介者中的的方法
            /// </summary>
            public void labaQuanqu使用全区喇叭(string message要发送的信息,Colleague colleague发送者)
            {
                mediator.SendMassge向其他同事发送信息("message要发送的信息", colleague发送者);
            }
            /// <summary>
            /// 重写抽象方法,这个方法只能中介者使用,只能中介者使用,只能中介者使用
            /// </summary>
            public override void labaJieshou接收喇叭消息(string Message)
            {
                SetText显示UI文字(Message);
            }
            public void SetText显示UI文字(string text要显示的文字)
            {
                Debug.Log(text要显示的文字);
            }
        }
        /// <summary>
        /// 实体中介者
        /// </summary>
        public class MediatorConcreate : IMediator
        {
            /// <summary>
            /// 步骤3 这个步骤是为了提供给其他这个类型的类一个  可以被中介者认识此同事的方法;
            /// </summary>
            public ColleagueConcreateA concreateA;

            public void SetColleagueConcreateA(ColleagueConcreateA colleagueConcreate)
            {
                concreateA = colleagueConcreate;
            }

            public void SendMassge向其他同事发送信息(string str传进来的信息, Colleague colleague)
            {
                concreateA.labaJieshou接收喇叭消息(str传进来的信息);
            }
        }

        3.1、在中介者模式中写上SetColleagueA方法(有几个同事写几个方法;目的是让中介者认识这个同事)

        3.2、在同事类中写上针对中介者的构造函数(目的是让这个同事认识这个中介者)

    使用方法

        1、new中介者

        mediatorConcreate服务器 = new MediatorConcreate();

        2、new全部同事类,并用同事类的构造函数让自己认识中介者

        //大家互相认识的过程
        yuanfenao缘分嗷 = new ColleagueConcreateA(mediatorConcreate服务器);

        3、使用在中介者中,对应同事类的Set方法(让中介者认识这个同事

        mediatorConcreate服务器.SetColleagueConcreateA(yuanfenao缘分嗷);

        4、使用同事类中的方法(建议只有同事类调用中介者

        yuanfenao缘分嗷.labaQuanqu使用全区喇叭("钱柜皮西裙 112983 每天滴滴滴 详细加裙 私聊管理 滴滴滴哦", yuanfenao缘分嗷);

完整代码:

        public MediatorConcreate mediatorConcreate服务器;

        public ColleagueConcreateA yuanfenao缘分嗷;

	void Start () {
        //创建中介者
        mediatorConcreate服务器 = new MediatorConcreate();

        //大家互相认识的过程
        yuanfenao缘分嗷 = new ColleagueConcreateA(mediatorConcreate服务器);
        mediatorConcreate服务器.SetColleagueConcreateA(yuanfenao缘分嗷);

        yuanfenao缘分嗷.labaQuanqu使用全区喇叭("钱柜皮西裙 112983 每天滴滴滴 详细加裙 私聊管理 滴滴滴哦", yuanfenao缘分嗷);
	}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值