门面模式详解

门面模式(Facade Design Pattern),又称为外观模式,通过对外提供一组统一的接口,让接口更易用。

门面模式的原理和实现都不复杂,应用场景也比较明确,主要就是用在接口设计方面。

平常我们开发,为了保证接口单一原则,以及接口的复用性和隔离性,我们的接口都会做的粒度比较细,一个接口只做一件事。这样对于解耦、复用是很好的。但是当粒度过小时,有些外部系统想要开发一个功能时,需要调用大量的接口才能得到完整的数据或信息,这样的体验是非常不好的。

但是一个接口设计的过大,什么信息都包含其中,要做很多事情,会导致接口通用性和复用性差。

针对这种接口的复用性以及易用性的矛盾,门面模式就是一个比较好的解决方式。

优缺点

优点

  1. 简化调用,封装了繁琐的细节。
  2. 减少系统间依赖,遵循最小依赖原则。
  3. 接口对外透明,不需要调用者关心。

缺点

  1. 违背了单一原则。
  2. 减少了接口的灵活性和复用性,接口内部更加复杂。

应用场景

  1. 很多监控系统提供的统一监控信息,就是各种细粒度的监控聚合后提供的统一接口。

  2. 模块之间对外暴露的依赖调用,一般都会做一层封装,把内部的数据聚合封装后再对外提供。

  3. 在各种分层模型中,层与层之间通过接口交互,一般这些接口都属于包装过的门面模式。

门面模式的构成

门面模式的构成非常简单,也很好理解,主要就是两部分:

  • 多个细粒度的接口(原始接口)。
  • 细粒度接口组合成的更大的接口(门面接口)。

我们用一个展示计算机信息的接口为例。
计算中有 CPU / 内存 / 磁盘 等信息,每个信息都有自己的接口。
但是我们一般使用时,都是关注整个计算机整体的信息情况,没必要一个个单独去看。
这时候提供一个统一的接口查看整个计算机的基本信息就非常好了。

原始接口

我们定义3个细粒度的接口,分别用来展示 CPU / 内存 / 磁盘 的信息。

class Cpu:
    def info(self):
        print("i7-8700,8核")


class Memory:
    def info(self):
        print("16GB内存")


class Disk:
    def info(self):
        print("512GB")

门面接口

定义一个展示整体计算机信息的接口类,将细粒度接口都封装了起来,更加易用。

class ComputerInfo:
    def __init__(self):
        self.cpu = Cpu()
        self.mem = Memory()
        self.disk = Disk()

    def show(self):
        self.cpu.info()
        self.mem.info()
        self.disk.info()

具体使用

# 单独使用,需要调用3个接口,麻烦
Cpu().info()
Memory().info()
Disk().info()

# 通过门面模式封装成一个,只需要调用一个
ComputerInfo().show()

总结

门面模式是专门做接口整合的,解决的是多接口调用带来的问题,提高接口的易用性。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

tlqwanttolearnit

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值