zoukankan      html  css  js  c++  java
  • Unity---游戏设计模式(2)之外观模式




    概述参考请看 参考博客

    外观模式通过引入一个外观角色来简化客户端与子系统之间的交互,为复杂的子系统调用提供一个统一的入口,降低子系统与客户端的耦合度,且客户端调用非常方便。

    1、外观模式原型

    外观模式原型的UML图

    外观模式代码

    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    
    /// <summary>
    /// 客户端类
    /// </summary>
    public class Client:MonoBehaviour
    {
        public FacadeMode mFacadeMode;
    
        private void Start()
        {
            mFacadeMode.Work1();
    		mFacadeMode.Work2();
    		mFacadeMode.Work3();
        }
    }
    
    public class SubSystem1
    {
        public void Method1()
        {
            //业务系统代码
        }
    }
    public class SubSystem2
    {
        public void Method2()
        {
            //业务系统代码
        }
    }
    public class SubSystem3
    {
        public void Method3()
        {
            //业务系统代码
        }
    }
    
    /// <summary>
    /// 外观模式原型代码
    /// </summary>
    public class FacadeMode
    {
        public SubSystem1 system1 = new SubSystem1();
        public SubSystem2 system2 = new SubSystem2();
        public SubSystem3 system3 = new SubSystem3();
    
        public void Work1()
        {
            system1.Method1();
        }
        public void Work2()
        {
            system2.Method2();
        }
        public void Work3()
        {
            system3.Method3();
        }
    }
    
    

    2、外观模式实例

    外观模式实例代码

    GameFacade类

    
    /// <summary>
    /// 外观模式
    /// </summary>
    public class GameFacade
    {
        private AchievementSystem mAchievementSystem;
        private CharacterSystem mCharacterSystem;
        private GameEventSystem mGameEventSystem;
        private UISystem mUISystem;
    
    	//外观模式
    	//把初始化系统的代码放在外观模式中。
        //实际代码运行则在各个系统中
        //调用者只需要调用这个Init函数就行了。
        public void Init()
        {
            mAchievementSystem.Init();
            mCharacterSystem.Init();
            mGameEventSystem.Init();
            mUISystem.Init();
        }
    }
    

    调用初始化系统的代码则放在这个场景类中。
    假如当客户端需要使用某个系统的方法时,只需要在GameFacade中调用这个方法,不再需要再客户端中持有这个系统再调用这个系统的方法了,只需要持有一个GameFacade就可以了。
    之后我们可以再把GameFacade改成单例模式,那么就连GameFacade的持有也不需要了,非常方便。

    3、外观模式优缺点

    优点

    1. 降低系统和客户间的耦合性
    2. 外观模式对客户端屏蔽了子系统组件,从而简化了接口,减少了客户端处理的对象数目并使子系统的使用更加简单。

    缺点

    1. 增加新系统需要修改外观类代码,违背开闭原则
  • 相关阅读:
    员工思维 主管思维
    屏幕截图检测视频有效性
    ffmpeg resize and scale
    tmp
    Generative Adversarial Networks
    oss
    代码与性格
    Message: unknown error: Element is not clickable at point
    解决ES集群状态异常教程(存在UNASSIGNED)
    whl 安装
  • 原文地址:https://www.cnblogs.com/Fflyqaq/p/11576518.html
Copyright © 2011-2022 走看看