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();
    }
}
全部评论

相关推荐

03-04 07:14
门头沟学院 C++
黑皮白袜臭脚体育生:老板:都给工作机会了还想要工资,哪来这么多好事
点赞 评论 收藏
分享
03-17 23:54
黑龙江大学 Java
来个白菜也好啊qaq:可以的,大厂有的缺打手
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务