0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

门面模式通用代码实现

科技绿洲 来源:Java技术指北 作者:Java技术指北 2023-10-09 11:04 次阅读

1、什么是门面模式?

Provide a unified interface to a set of interfaces in a subsystem.Facade defines a higher-level interface that makes the subsystem easier to use.

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

说人话:假设有一个系统 A,提供了 a、b、c、d 四个接口。系统 B 完成某个业务功能,需要调用 A 系统的 a、b、d 接口。利用门面模式,我们提供一个包裹 a、b、d 接口调用的门面接口 x,给系统 B 直接使用。至于为什么要这样做,下文会告诉你。

2、门面模式定义

图片

①、Facade 门面角色

此角色知晓子系统的所有功能和责任,客户端可以调用这个角色的方法,会将所有从客户端发来的请求委派到相应的子系统去, 也就说该角色没有实际的业务逻辑, 只是一个委托类。

②、Subsystem 子系统角色

可以同时有一个或者多个子系统。每一个子系统都不是一个单独的类, 而是一个类的集合。子系统并不知道门面的存在。对于子系统而言, 门面仅仅是另外一个客户端而已。

3、门面模式通用代码实现

/**
 * 子系统A
 */
public class ClassA {
    public void doA(){
        System.out.println("子系统A方法");
    }
}
/**
 * 子系统B
 */
public class ClassB {
    public void doB(){
        System.out.println("子系统B方法");
    }
}
/**
 * 子系统C
 */
public class ClassC {
    public void doC(){
        System.out.println("子系统C方法");
    }
}
/**
 * 门面角色
 */
public class Facade {
    private ClassA a = new ClassA();
    private ClassB b = new ClassB();
    private ClassC c= new ClassC();

    // 提供给外部访问的方法
    public void doSomething(){
        this.a.doA();
        this.b.doB();
        this.c.doC();
    }
}

看上去,没有门面角色,我们自己去调用三个子系统的方法也是一样,但是假如三个子系统之间有先后顺序,还有来自不同网络开销,我们通过门面模式提供的方法,就屏蔽了这些差异,让我们只需要调用门面角色提供给我们的方法即可。

4、门面模式优点

①、减少系统的相互依赖

如果我们不使用门面模式, 外界访问直接深入到子系统内部, 相互之间是一种强耦合关系, 你死我就死, 你活我才能活, 这样的强依赖是系统设计所不能接受的, 门面模式的出现就很好地解决了该问题, 所有的依赖都是对门面对象的依赖, 与子系统无关。

②、提高安全性

想让你访问子系统的哪些业务就开通哪些逻辑, 不在门面上开通的方法, 你休想访问到。

5、门面模式应用场景

①、解决易用性问题

门面模式可以用来封装系统的底层实现,隐藏系统的复杂性,提供一组更加简单易用、更高层的接口。

②、解决性能问题

通过将多个接口调用替换为一个门面接口调用,减少网络通信成本,提高客户端的响应速度。

③、解决分布式事务问题

需要调用多个子系统的接口方法,而这些接口要么都成功,要么都失败,我们就可以利用门面模式包裹这些子系统接口,然后通过某种方法保证这些接口在一个事务中完成。

6、适配器模式和门面模式区别

适配器模式:主要做接口转换,解决的是原接口和目标接口不匹配的问题。门面模式:主要做接口整合,解决的是多接口调用带来的问题。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 接口
    +关注

    关注

    33

    文章

    8345

    浏览量

    150495
  • 通信
    +关注

    关注

    18

    文章

    5923

    浏览量

    135687
  • 代码
    +关注

    关注

    30

    文章

    4689

    浏览量

    68069
  • 客户端
    +关注

    关注

    1

    文章

    287

    浏览量

    16624
收藏 人收藏

    评论

    相关推荐

    实现TCP的C代码封装(含代码

    实现TCP的C代码封装(含代码
    的头像 发表于 09-28 16:03 2375次阅读
    <b class='flag-5'>实现</b>TCP的C<b class='flag-5'>代码</b>封装(含<b class='flag-5'>代码</b>)

    用C语言实现状态机设计模式

    状态机模式是一种行为模式,在《设计模式》这本书中对其有详细的描述,通过多态实现不同状态的调转行为的确是一种很好的方法,只可惜在嵌入式环境下,有时只能写纯C
    发表于 12-14 13:38 2768次阅读

    利用Swap模式实现代码回滚操作

    前面介绍了MCUboot的基础知识,您可通过上方链接回顾历史文章,上次介绍了Swap模式,本次着重介绍利用Swap模式实现代码回滚操作。在某些应用场景中,可能新版本的Firmware存在bug而需要返回至上一次的固件。
    的头像 发表于 06-19 15:45 1047次阅读
    利用Swap<b class='flag-5'>模式</b><b class='flag-5'>实现代码</b>回滚操作

    菜鸟福音|自动代码生成工具——Dev SDk通用平台

    ,可以将我们生成好的 通用平台版代码 移植到符合条件的平台,从而实现机智云所提供的各种功能。本文将主要说明 通用平台版 的移植。2.如何自动生成"
    发表于 12-20 17:07

    通用网络测控系统硬件设计如何实现

    )基本都不支持网络,也不能简单升级具有网络功能,且模式较为单一。因而,设计与实现了一种网络化通用测控系统平台,以实现网络化测控需求且具有一般平台的
    发表于 11-08 07:45

    GPIO模式与GPIO配置代码实现

    选择三、GPIO配置代码实现四、总工程实现一、GPIO模式STM32的 GPIO模式有以下几种: GPIO_Mode_AIN --模拟输入G
    发表于 08-24 07:20

    怎样去实现STM32通用定时器的输出比较模式

    怎样去实现STM32通用定时器的输出比较模式呢?其代码该怎样去实现呢?
    发表于 11-24 07:44

    SPI的几种模式通用吗?

    SPI的几种模式通用
    发表于 10-10 08:15

    设计模式的原则及实现代码的复用

    for modification。 意思:软件模块应该对扩展开放,对修改关闭。 举例:在程序需要进行新增功能的时候,不能去修改原有的代码,而是新增代码实现一个热插拔的效果(热插拔:灵活的去除或添加功能,不影响到原有的
    发表于 09-26 15:12 0次下载

    DSP系统通用设计模式及其实现   

    的软硬件扩展性。本文介绍的这种基于视频处理的DSP系统的框架正是以传统的数字信号处理方式为基础,以高效性和扩展性为目标,并且能够适应大多数的器件而提出的在硬件上和在软件上的解决方案。 可通用设计模式的思路 硬件结构 传统的数字信
    发表于 10-20 09:18 0次下载
    DSP系统<b class='flag-5'>通用</b>设计<b class='flag-5'>模式</b>及其<b class='flag-5'>实现</b>   

    代码重用攻击的通用模型及描述语言

    由于代码重用攻击的方式方法多样,相应的 gadget在结构上也不尽相同,目前尚没有一种通用的方法能够用来描述多种代码重用攻击下的 gadget。结合几种常见代码重用攻击的攻击模型和图灵
    发表于 05-29 16:29 5次下载

    大话设计模式代码下载

    大话设计模式代码下载
    发表于 07-22 10:50 6次下载

    STM32 低功耗睡眠模式(SLEEP)事件(EVENT)唤醒实现及优化

    和STM32CUBEIDE环境介绍睡眠模式(SLEEP)事件唤醒的实现(HAL库)。这里以管脚中断为中断源。SLEEP模式只是停止CPU和后续代码执行,唤醒(其实是continue的作
    发表于 12-31 19:08 34次下载
    STM32 低功耗睡眠<b class='flag-5'>模式</b>(SLEEP)事件(EVENT)唤醒<b class='flag-5'>实现</b>及优化

    PWR休眠模式代码示例

    进入睡眠模式的功能。 /* 无限循环 */ /* USER CODE BEGIN WHILE */while ( 1 ) { /* USER CODE END WHILE */ /* 用户代码开始 3 */     HAL_延迟(1000 );    HAL_Suspen
    发表于 03-23 14:32 545次阅读
    PWR休眠<b class='flag-5'>模式</b>和<b class='flag-5'>代码</b>示例

    设计模式结构性:门面模式

    门面模式,是指提供一个统一的接口去访问多个子系统的多个不同的接口,它为子系统中的一组接口提供一个统一的高层接口。
    的头像 发表于 06-08 14:28 625次阅读
    设计<b class='flag-5'>模式</b>结构性:<b class='flag-5'>门面</b><b class='flag-5'>模式</b>