资讯专栏INFORMATION COLUMN

Java设计模式之(九)——门面模式

不知名网友 / 2380人阅读

摘要:门面模式提供一个高层次的接口,使得子系统更易于使用。适配器模式和门面模式区别适配器模式和门面模式区别适配器模式主要做接口转换,解决的是原接口和目标接口不匹配的问题。

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、门面模式定义

image-20210911234615889

①、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、适配器模式和门面模式区别

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

作者:IT可乐

资源:微信搜【IT可乐】关注我,回复 【电子书】有我特别筛选的免费电子书。
本文版权归作者所有,欢迎转载,但未经作者同意不能转载,否则保留追究法律责任的权利。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/125376.html

相关文章

  • 设计模式结构型

    摘要:适配器模式不应在设计阶段考虑,它是为了解决已经上线的问题的存在。组合模式将对象组合成树形结构以表示部分整体的层次结构,使得用户对单个对象和组合对象的使用具有一致性。 代理模式 代理模式之前已经讲过,附上链接代理模式 装饰者模式 装饰者模式定义:动态地给一个对象添加一些额外的职责。就增加功能来说,装饰模式相比生成子类更为灵活。 装饰模式博主在第一次学习是懵逼的,是因为代理模式中代理对象和...

    Muninn 评论0 收藏0
  • 设计模式门面模式

    摘要:定义与类型定义又叫门面模式,提供了一个统一的接口,用来访问子系统中的一群接口外观模式定义了一个高层接口,让子系统更容易使用类型结构型类图门面模式是对系统复杂的关系处理做了一个封装,对外提供一个简单的接口,成员介绍子系统被门面模式封装的子系统 0x01.定义与类型 定义:又叫门面模式,提供了一个统一的接口,用来访问子系统中的一群接口 外观模式定义了一个高层接口,让子系统更容易使用 类型...

    Chiclaim 评论0 收藏0
  • Java设计模式综合运用(门面+模版方法+责任链+策略)

    摘要:此案例中,门面类为,然后各个门面方法的参数均为抽象类,通过决定调用中的哪个子类。抽象类持有类的对象,并且实现累的一个接口是为了容器启动完成的时候自动把相应的校验器加入到校验器链中。 引言:很久没有更新了,主要是工作忙。最近,工作中一个子系统升级,把之前不易扩展的缺点给改进了一下,主要是运用了几个设计模式进行稍微改造了一下。本文也同步发布至简书,地址: https://www.jians...

    刘东 评论0 收藏0
  • php设计模式

    摘要:我们今天也来做一个万能遥控器设计模式适配器模式将一个类的接口转换成客户希望的另外一个接口。今天要介绍的仍然是创建型设计模式的一种建造者模式。设计模式的理论知识固然重要,但 计算机程序的思维逻辑 (54) - 剖析 Collections - 设计模式 上节我们提到,类 Collections 中大概有两类功能,第一类是对容器接口对象进行操作,第二类是返回一个容器接口对象,上节我们介绍了...

    Dionysus_go 评论0 收藏0
  • php设计模式

    摘要:我们今天也来做一个万能遥控器设计模式适配器模式将一个类的接口转换成客户希望的另外一个接口。今天要介绍的仍然是创建型设计模式的一种建造者模式。设计模式的理论知识固然重要,但 计算机程序的思维逻辑 (54) - 剖析 Collections - 设计模式 上节我们提到,类 Collections 中大概有两类功能,第一类是对容器接口对象进行操作,第二类是返回一个容器接口对象,上节我们介绍了...

    vspiders 评论0 收藏0

发表评论

0条评论

不知名网友

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<