外观模式(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
相关推荐
青草地溪水旁2 小时前
设计模式(C++)详解——解释器模式(2)西猫雷婶3 小时前
python学智能算法(三十九)|使用PyTorch模块的normal()函数绘制正态分布函数图Humbunklung3 小时前
C# 压缩解压文件的常用方法Asort4 小时前
JavaScript设计模式(三)——抽象工厂模式 (Abstract Factory)liuyunshengsir4 小时前
-bash: ssh-copy-id: command not found的两种解决方法lrh30254 小时前
设计模式-3D引擎中的设计模式脑花儿4 小时前
ABAP EXCEL模板数据上传 及 注意事项mudtools4 小时前
.NET操作Excel:高效数据读写与批量操作天高云淡ylz5 小时前
不同上位开发语言、PLC下位平台、工业协议与操作系统平台下的数据类型通用性与差异性详解