概述参考请看 参考博客
外观模式通过引入一个外观角色来简化客户端与子系统之间的交互,为复杂的子系统调用提供一个统一的入口,降低子系统与客户端的耦合度,且客户端调用非常方便。
外观模式原型的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();
}
}
外观模式实例的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当作中间外观类,就可以大幅度降低系统之间的耦合性。
原文:https://www.cnblogs.com/Fflyqaq/p/11576518.html