设计模式之门面(Facade)

本文介绍了门面模式的基本概念,解释了如何通过一个统一的门面对象来管理子系统与外部的交互,以此简化复杂的子系统并提高其可复用性和独立性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

外部与一个子系统的通信必须通过一个统一的门面(Facade)对象进行,这就是门面模式。

设计模式的任务就是协助设计师处理复杂系统的设计。设计师处理复杂系统的一个常见方法便是将其 "分而治之" ,把一个系统划分为几个较小的子系统。

门面模式要求一个子系统的外部与其内部的通信必须通过一个统一的门面(Facade)对象进行。门面模式提供一个高层次的接口,使得子系统更易于使用。

门面模式中的角色:
门面(Facade)角色:客户端可以调用这个角色的方法。在正常情况下,本角色会将所有从客户端发来的请求委派到相应的子系统去。
子系统(Subsystem)角色:每一个子系统都可以被客户端直接调用,或者被门面角色调用。子系统并不知道门面的存在,对于子系统而言,门面仅仅是另一个客户端而已。

在门面模式中,通常只需要一个门面类,并且此门面类只有一个实例,换言之它是一个单例类。但如果一个系统有好几个子系统的话,每个子系统都可有一个门面类,整个系统可以有数个门面类。
如果一个门面模式不能将子系统的所有行为提供给外界,那么可以通过修改或继承门面类的方法将子系统的行为提供给外界。但是,如果一个子系统没有某个行为,想通过修改或继承门面类的办法来提供这个新的行为是错误的。

在什么情况下使用门面模式:
为一个复杂子系统提供一个简单接口:子系统往往因为不断演化而变得越来越复杂,使用门面模式可以使得子系统更具有可复用性。
子系统的独立性:引入门面模式将一个子系统与它的客户端以及其他子系统分离,可以提高子系统的独立性和可移植性。
层次化结构:在构建一个层次化的系统时,可以使用 Facade 模式定义系统中每一层的入口。如果层与层之间是相互依赖的,则可以限定它们仅通过 Facade 进行通信,从而简化层与层之间的依赖关系。
迪米特法则说:"只与你直接的朋友们通信" 。迪米特法则要求每一个对象与其他对象的相互作用均是短程的,而不是长程的。只要可能,朋友的数目越少越好。换言之,一个对象只应当知道它的直接合作者的接口。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值