Unity 外观模式
初学者,自用笔记
用于把多个 子系统(Subsystem) 的一系列复杂交互封装到一个 统一入口(Facade) 里,让调用方用更少、更稳定的 API 完成常见流程,避免上层直接依赖一堆底层模块与调用顺序细节。
- Facade(外观/门面):对外提供简化接口(例如 InitGame() / LoadScene() / SaveGame()),内部-负责编排流程、聚合调用多个子系统。
- Subsystem(子系统):各自完成具体能力的模块集合(资源、网络、音频、UI、存档等),保持职责单一;外观只是“调度者/包装层”,不替代它们的实现。
- Client(调用方):业务层/上层逻辑,只面向 Facade 调用,从而减少耦合、降低使用成本;必要时仍可直接使用某些子系统(可选)。
简单例子
Facade
public sealed class GameFacade
{
private readonly AssetSystem _assets;
public GameFacade(AssetSystem assets, AudioSystem audio, UiSystem ui)
{
_assets = assets;
}
// 对外的简单入口:开始进入主菜单
public void EnterMainMenu()
{
_assets.Load<GameObject>("UI/MainMenu"); // 示例:预加载主菜单资源
}
}
Subsystem
public sealed class AssetSystem
{
public T Load<T>(string path) where T : Object
{
return Resources.Load<T>(path);
}
}
Client
// Client(调用方):只依赖外观,不直接和各子系统打交道
public class FacadeExample : MonoBehaviour
{
private GameFacade _game;
private void Awake()
{
// 这里简单 new,真实项目常见是通过DI/ServiceLocator 注入
var assets = new AssetSystem();
var audio = new AudioSystem();
var ui = new UiSystem();
_game = new GameFacade(assets, audio, ui);
}
private void Start()
{
_game.EnterMainMenu();
}
}
查看9道真题和解析