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. 增加新系统需要修改外观类代码,违背开闭原则
原文地址:https://www.cnblogs.com/Fflyqaq/p/11576518.html