🎛️
一句话理解:外观模式为复杂子系统提供一个更简单、稳定的高层入口,让调用方不必了解内部协作细节。

它解决什么问题

开始一局游戏可能需要加载存档、切换场景、启动音乐和初始化任务。若 UI 直接依赖每个子系统,它既知道过多细节,也容易按错顺序。外观把完整用例封装为一个明确操作。

C# 示例:游戏流程外观

主菜单只调用 ContinueGameAsyncStartNewGameAsync,无需知道三个服务如何配合。高级调用方仍可直接使用子系统,外观并不禁止底层接口。

设计要点

  • 方法应表达完整用例,例如“继续游戏”,而不是简单转发每个底层方法。
  • 外观依赖抽象,便于测试流程与错误分支。
  • 明确失败处理、取消和异步顺序。
  • 可以为不同客户端提供多个小外观,不必做一个覆盖全项目的总入口。

与其他模式的区别

适配器改变接口以解决不兼容;外观重新组织多个接口以降低使用复杂度。中介者协调同级对象之间的交互;外观通常是客户端访问子系统的单向入口。

风险

外观若不断吸收业务,会变成“上帝类”。当职责横跨存档、战斗、商城等多个边界时,应按用例或领域拆分。

小结

好的外观不是把所有方法集中到一个类,而是给常用业务流程一个清晰、稳定且可测试的入口。