zoukankan      html  css  js  c++  java
  • 【Unity3D与23种设计模式】中介者模式(Mediator)

    GoF中定义:

    定义一个接口来封装一群对象的互动行为

    中介者通过移除对象之间的引用

    以减少他们之间的耦合度

    并且能改变它们之间的互动独立性

    游戏做的越大,系统划分的也就越多

    如事件系统,关卡系统,信息系统,界面系统等。

    系统切分越细,就意味着系统之间的沟通越复杂

    单一系统引入太多其他系统的功能,不利于单一系统的转换和维护

    单一系统被过多的系统所依赖,不利于接口的更改,容易牵一发而动全身

    由于需要提供给其他系统操作,系统的接口可能会过于庞大,不容易维护

    using UnityEngine;
    
    public abstract class Mediator {
         public abstract void SendMessage(Colleague theColleague,string Message);
     }
    
    public abstract class Colleague {
         protected Mediator m_Mediator = null;
    
        public Colleague(Mediator theMediator) {
             m_Mediator = theMediator;
         }
    
        public abstract void Request(string Message);
     }
    
    public class ConcreateColleague1 : Colleague {
         public ConcreateColleague1(Mediator theMediator) : base(theMediator) { }
    
        public void Action() {
             m_Mediator.SendMessage(this,"Colleage1发出通知");
         }
    
        public override void Request(string Message)
         {
             Debug.Log("ConcreateColleague1.Request:" + Message);
         }
     }
    
    public class ConcreateColleague2 : Colleague
     {
         public ConcreateColleague2(Mediator theMediator) : base(theMediator) { }
    
        public void Action()
         {
             m_Mediator.SendMessage(this,"Colleage2发出通知");
         }
    
        public override void Request(string Message)
         {
             Debug.Log("ConcreateColleague2.Request:" + Message);
         }
     }
    
    public class ConcreteMediator : Mediator {
         ConcreateColleague1 m_Colleague1 = null;
         ConcreateColleague2 m_Colleague2 = null;
    
        public void SetColleague1(ConcreateColleague1 theColleague) {
             m_Colleague1 = theColleague;
         }
    
        public void SetColleague2(ConcreateColleague2 theColleague) {
             m_Colleague2 = theColleague;
         }
    
        public override void SendMessage(Colleague theColleague, string Message)
         {
             if (m_Colleague1 == theColleague)
                 m_Colleague2.Request(Message);
    
            if (m_Colleague2 == theColleague)
                 m_Colleague1.Request(Message);
         }
     }

    先产生中介者ConcreteMediator的对象之后

    接着产生两个Colleague对象

    并将其设置给中介者

    分别调用两个Colleague对象的Action方法

    查看信息是否通过Mediator传递给Colleague

    文章整理自书籍《设计模式与游戏完美开发》 菜升达 著

  • 相关阅读:
    21. Node.Js Buffer类(缓冲区)-(一)
    20.Node.js EventEmitter的方法和事件
    19.Node.js EventEmitter
    18.Node.js 事件循环
    17.Node.js 回调函数--异步编程
    16.REPL 命令
    15.Node.js REPL(交互式解释器)
    14.NPM 常用命令
    **PHP Notice: Undefined index:...问题的解决方法
    **CI中的order_by在get_where之前
  • 原文地址:https://www.cnblogs.com/fws94/p/7199500.html
Copyright © 2011-2022 走看看