外观模式(Facade Pattern)
概念:
· 一种结构型设计模式;
· 为子系统中的一组复杂接口提供一个统一的高层接口,使得子系统更加容易被使用;
· 客户端只需要和外观模式打交道,无需在意具体每个子系统的调度;
UML结构:
+----------------+ | Client | +----------------+ | v +----------------+ | Facade | 外观类 +----------------+ | + Operation1() | | + Operation2() | +----------------+ / | \ / | \ v v v +----------------+ +----------------+ +----------------+ | SubSystemA | | SubSystemB | | SubSystemC | +----------------+ +----------------+ +----------------+ | + OperationA() | | + OperationB() | | + OperationC() | +----------------+ +----------------+ +----------------+
代码示例:
cs/// <summary> /// 子系统A /// </summary> public class SubSystemA { public void OperationA() { Console.WriteLine("子系统A的操作"); } } /// <summary> /// 子系统B /// </summary> public class SubSystemB { public void OperationB() { Console.WriteLine("子系统B的操作"); } } /// <summary> /// 子系统C /// </summary> public class SubSystemC { public void OperationC() { Console.WriteLine("子系统C的操作"); } } /// <summary> /// 外观类 /// </summary> public class Facade { private SubSystemA a = new(); private SubSystemB b = new(); private SubSystemC c = new(); private void Operation1() { Console.WriteLine("执行外观方法 Operation1:"); a.OperationA(); b.OperationB(); } public void Operation2() { Console.WriteLine("执行外观方法 Operation2:"); b.OperationB(); c.OperationC(); } } /// <summary> /// 客户端 /// </summary> public class Client { public static void Main() { Facade facade = new Facade(); // 客户端只调用外观方法,而不直接访问子系统 facade.Operation1(); Console.WriteLine(); facade.Operation2(); } }
特点:
优点:· 简化调用:隐藏子系统的复杂性,客户端只需要和外观交互;
· 降低耦合:外观类和子系统之间相对独立,方便维护和扩展;
· 更好的分层结构;
缺点:· 可能过度封装:如果外观类封装得太多,客户端将失去对子系统的灵活控制;
· 单点问题:外观类本身可能成为系统演化的瓶颈或单点故障;
· 扩展性受限:如果需求变动频繁,外观接口可能需要频繁修改,增加维护成本;
适用场景:
· 复杂系统需要简化调用时:子系统很多,调用步骤复杂,希望提供一个简单的接口;
· 分层架构中,层与层之间解耦:在三层架构、MVC 等场景里,外观模式能减少子系统之间的依赖;
· 客户端与多个子系统存在依赖时:外观可以作为"中间人",避免客户端直接依赖多个子系统,降低耦合度;
举例:
· 影院系统 ;
· 战斗系统外观:客户端只需调用攻击敌人,而不用自己去调用角色、技能、Buff、动画、音效等多个系统;
· 游戏启动流程 :StartGame():统一完成"加载资源 → 播放BGM → 显示UI → 连接服务器",ExitGame():统一关闭网络、释放资源、保存进度;
· 背包系统:只需调用添加物品、减少物品,无需知道物品管理、UI、存档怎么操作;
【设计模式】外观模式
大飞pkz2025-09-26 15:32
相关推荐
海梨花1 天前
【八股笔记】SSM薄荷撞~可乐1 天前
C#拆箱/装箱(性能优化)JAVA学习通1 天前
OJ竞赛平台----C端题目列表想唱rap1 天前
C++ string类的使用胖咕噜的稞达鸭1 天前
C++中的父继子承(2)多继承菱形继承问题,多继承指针偏移,继承组合分析+高质量习题扫尾继承多态JAVA学习通1 天前
基本功 | 一文讲清多线程和多线程同步啦啦9117141 天前
如何理解Java中的并发?猫头虎1 天前
OpenAI发布构建AI智能体的实践指南:实用框架、设计模式与最佳实践解析昨天的猫1 天前
项目中原来策略模式这么玩才有意思😁😁😁api_180079054601 天前
异步数据采集实践:用 Python/Node.js 构建高并发淘宝商品 API 调用引擎