欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 艺术 > 【设计模式】深入解析设计模式:门面模式(外观模式)的定义、优点和代码实现

【设计模式】深入解析设计模式:门面模式(外观模式)的定义、优点和代码实现

2025/4/4 21:46:11 来源:https://blog.csdn.net/2402_84916296/article/details/146874486  浏览:    关键词:【设计模式】深入解析设计模式:门面模式(外观模式)的定义、优点和代码实现

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述


门面模式(外观模式)


SLF4J是门面模式的典型应用(但不仅仅使用了门面模式)。


门面模式定义


门面模式Facade Pattern)又称为外观模式,提供了一个统一的接口,用来访问子系统中的一群接口

其主要特征是定义了一个高层接口,让子系统更容易使用。

在这里插入图片描述


门面模式主要包含2种角色

  • 外观角色(Facade)

    • 也称门面角色,系统对外的统一接口。
  • 子系统角色(SubSystem)

    • 可以同时有一个多个 SubSystem
    • 每个SubSystem不是一个单独的类,而是一个类的集合
    • SubSystem并不知道Facade的存在,对于SubSystem而言,Facade只是另一个客户端而已(即FacadeSubSystem透明)。
  1. 比如去医院看病,可能要去挂号、门诊、化验、取药,让患者或患者家属觉得很复杂;
  2. 如果有提供接待人员,只让接待人员来处理,就很方便。

在这里插入图片描述


门面模式的实现


场景:回家,我们会开各个屋的灯。离开家时,会关闭各个屋的灯

如果家里设置一个总开关,来控制整个屋的灯就会很方便。

我们使用门面模式的实现


我们先来定义一个灯接口

在这里插入图片描述


接下里,我们定义 Light 的子系统 SubSystem ;

可以有多个 SubSystem ,这里定义两个类:LivingRoomLight,BedRoomLight

在这里插入图片描述


在这里插入图片描述


接下来,我们定义外观角色(Facade),用于打开所有的灯或者关闭所有的灯:

在这里插入图片描述


外观角色需要操控 LivingRoomLightBedRoomLight 这两个子系统,所以也要有子系统 on()off() 对应的方法:

在这里插入图片描述


上面为了方便,直接在外观角色中实现了 Light 接口,但是我们也可以不实现,都是可以的:

门面模式是设计思想的一种,重思想,轻代码实现

在这里插入图片描述


在这里插入图片描述


这时候,我们需要 main 方法来表示客户端:

在这里插入图片描述

不使用门面模式,我们开关灯的客户端写法如上图所示;


如果我们引入门面模式:

在这里插入图片描述

并且通过门面模式,我们修改子系统的内容,并不会影响客户端 Main 的使用;


门面模式的优点


  • 减少了系统的相互依赖,实现了客户端与子系统的耦合关系,这使得子系统的变化不会影响到调用它的客户端;
  • 提高了灵活性,简化了客户端对子系统的使用难度,客户端无需关心子系统的具体实现方式,而只需要和门面对象交互即可。
  • 提高了安全性。可以灵活设定访问权限,不在门面对象中开通方法,就无法访问。

在这里插入图片描述

在这里插入图片描述

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词