Unity---游戏设计模式(2)之外观模式

China☆狼群 提交于 2019-12-01 06:11:15



概述参考请看 参考博客

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

1、外观模式原型

外观模式原型的UML图

外观模式代码

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 Work()
    {
        system1.Method1();
        system2.Method2();
        system3.Method3();
    }
}

public class Client:MonoBehaviour
{
    public FacadeMode mFacadeMode;

    private void Start()
    {
        mFacadeMode.Work();
    }
}

2、外观模式实例

外观模式实例的UML图
和上面基本一样

外观模式实例代码

GameFacade类

/// <summary>
/// 外观模式: 存储所有的游戏系统,当作通信的间接类。
/// 单例模式: 和外观模式一起用,更方便通信
/// </summary>
public class GameFacade
{
    #region
    private static GameFacade _Instance = new GameFacade();
    public static GameFacade Instance { get { return _Instance; } }
    #endregion

    private AchievementSystem mAchievementSystem;
    private CharacterSystem mCharacterSystem;
    private GameEventSystem mGameEventSystem;
    private UISystem mUISystem;

    //把系统的初始化等代码放在GameFacade中
    //再用状态模式,在这个场景类中调用这几个方法。就能实现初始化、更新、释放功能。
    public void Init()
    {
        mAchievementSystem.Init();
        mCharacterSystem.Init();
        mGameEventSystem.Init();
        mUISystem.Init();
    }
    public void Update()
    {
        mAchievementSystem.Update();
        mCharacterSystem.Update();
        mGameEventSystem.Update();
        mUISystem.Update();
    }
    public void Release()
    {
        mAchievementSystem.Release();
        mCharacterSystem.Release();
        mGameEventSystem.Release();
        mUISystem.Release();
    }

    public void Method1()
    {
        //实现方法,调用某个游戏系统
    }
}

当某个对象需要调用某个系统时,可以在GameFacade中添加方法。然后对象再根据单例模式调用这个方法。把GameFacade当作中间外观类,就可以大幅度降低系统之间的耦合性。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!