概述参考请看 参考博客
外观模式通过引入一个外观角色来简化客户端与子系统之间的交互,为复杂的子系统调用提供一个统一的入口,降低子系统与客户端的耦合度,且客户端调用非常方便。
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当作中间外观类,就可以大幅度降低系统之间的耦合性。