- 学习网址:https://blog.csdn.net/lovelion/article/details/8258121
外观模式UML类图:
外观模式应用实例:
战斗场景下有各种各样的模块,战斗模块/关卡/角色管理/成就系统等等,因此用一个中介持有这些模块,战斗场景只需要调用
外观类:
using System;
using System.Collections.Generic;
using System.Text;
using UnityEngine;
//外观模式 后续会补充中介者模式
public class GameFacade
{
private static GameFacade _instance = new GameFacade();
private bool mIsGameOver = false;
public static GameFacade Insance { get { return _instance; } }
public bool isGameOver { get { return mIsGameOver; } }
private GameFacade() { }
//每个系统都有三个状态函数供外观者调用(Init/Update/Release)
private ArchievementSystem mArchievementSystem; //成就系统
private CampSystem mCampSystem; //兵营系统
private CharacterSystem mCharacterSystem; //角色系统(战士与敌人)
private EnergySystem mEnergySystem; //能力系统
private GameEventSystem mGameEventSystem; //事件系统
private StageSystem mStageSystem; //关卡系统
private CampInfoUI mCampInfoUI; //点击兵营显示兵营的操作界面(信息/训练/升级等操作)
private GamePauseUI mGamePauseUI; //游戏暂停界面
private GameStateInfoUI mGameStateInfoUI; //游戏状态(战士或者敌人多少个,生命值等等)
private SoldierInfoUI mSoldierInfoUI; //点击战士时显示战士当前的信息
/// <summary>
/// 游戏初始化
/// </summary>
public void Init()
{
mArchievementSystem = new ArchievementSystem();
mCampSystem = new CampSystem();
mCharacterSystem = new CharacterSystem();
mEnergySystem = new EnergySystem();
mGameEventSystem = new GameEventSystem();
mStageSystem = new StageSystem();
mCampInfoUI = new CampInfoUI();
mGamePauseUI = new GamePauseUI();
mGameStateInfoUI = new GameStateInfoUI();
mSoldierInfoUI = new SoldierInfoUI();
mArchievementSystem.Init();
mCampSystem.Init();
mCharacterSystem.Init();
mEnergySystem.Init();
mGameEventSystem.Init();
mStageSystem.Init();
mCampInfoUI.Init();
mGamePauseUI.Init();
mGameStateInfoUI.Init();
mSoldierInfoUI.Init();
LoadMemento();
}
public void Update()
{
mArchievementSystem.Update();
mCampSystem.Update();
mCharacterSystem.Update();
mEnergySystem.Update();
mGameEventSystem.Update();
mStageSystem.Update();
mCampInfoUI.Update();
mGamePauseUI.Update();
mGameStateInfoUI.Update();
mSoldierInfoUI.Update();
}
/// <summary>
/// 游戏结束,释放
/// </summary>
public void Release()
{
mArchievementSystem.Release();
mCampSystem.Release();
mCharacterSystem.Release();
mEnergySystem.Release();
mGameEventSystem.Release();
mStageSystem.Release();
mCampInfoUI.Release();
mGamePauseUI.Release();
mGameStateInfoUI.Release();
mSoldierInfoUI.Release();
CreateMemento();
}
}
战斗场景类(可以看到,此类非常简洁):
using System;
using System.Collections.Generic;
using System.Text;
public class BattleState:ISceneState
{
public BattleState(SceneStateController controller):base("03BattleScene",controller)
{}
//兵营 关卡 角色管理 行动力 成就系统。。。
public override void StateStart()
{
GameFacade.Insance.Init();
}
public override void StateEnd()
{
GameFacade.Insance.Release();
}
public override void StateUpdate()
{
if (GameFacade.Insance.isGameOver)
{
mController.SetState(new MainMenuState(mController));
}
GameFacade.Insance.Update();
}
}
单例模式:
学习网址:https://blog.csdn.net/carson_ho/article/details/52223097
缺点:
不容易扩展(因为无法继承)