寫在前面
在遊戲中一個場景可能需要與多個系統進行信息交互,比如戰鬥系統,揹包系統,經濟系統等
在編寫代碼時候勢必要將各個系統之間的通信和依賴降低到儘可能的小
這時候適合使用外觀模式,將應用程序只能看到外觀(facade)對象,不必理會內部的細節對象,從而降低應用程序的複雜度,提高應用程序的可維護性
案例分析
外觀模式整理後
這樣讓外部減少與子系統內多個模塊的交互,鬆散耦合,從而使外部能夠更簡單地使用各個子系統。
代碼編寫
以上篇文章項目繼續開發,比如在戰鬥場景中初始化各個系統
using System;
using System.Collections.Generic;
using System.Text;
using UnityEngine.SceneManagement;
class BattleScene : ISceneState
{
public BattleScene() : base("BattleScene")
{
}
public override void StartScene()
{
SceneManager.LoadScene(this.mSceneName);
BattleSystem bs = new BattleSystem();
bs.Init();
PacketSystem ps = new PacketSystem();
ps.Init();
GoldSystem gs = new GoldSystem();
gs.Init();
}
}
使用外觀模式管理代碼如下
Facade.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Facad
{
public void Init()
{
BattleSystem bs = new BattleSystem();
bs.Init();
PacketSystem ps = new PacketSystem();
ps.Init();
GoldSystem gs = new GoldSystem();
gs.Init();
}
}
在戰鬥場景內調用Facade來初始化各個子系統
using System;
using System.Collections.Generic;
using System.Text;
using UnityEngine.SceneManagement;
class BattleScene : ISceneState
{
public BattleScene() : base("BattleScene")
{
}
public override void StartScene()
{
SceneManager.LoadScene(this.mSceneName);
Facade facade = new Facade();
facade.Init();
}
}
但是外觀模式的缺點顯而易見了,違背了設計原則的開閉原則,當我們有其他系統需要做初始化工作時候將修改Facade。
原文地址:blog.liujunliang.com.cn