设计模式门面模式:接口就像门面,一眼就能看出你的代码水平

Posted 程序猿秘籍

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了设计模式门面模式:接口就像门面,一眼就能看出你的代码水平相关的知识,希望对你有一定的参考价值。

 什么是门面模式?

门面模式,是指提供一个统一的接口去访问多个子系统的多个不同的接口,它为子系统中的一组接口提供一个统一的高层接口。使得子系统更容易使用。、


举个栗子:现实生活中,我们去政府办事情的时候是不是需要很多的流程,比如:先去村委开证明,再去乡里办手续,最后再去城里办理业务?是不是一个人要跑三个地方,既费力又费时?难道就不能只去一个地方就能把这件事给办好?虽然政府现在还做不到,但是程序比较争气,它做到了!



这是一个非常正常的接口请求吧,你们觉得这样的设计有问题吗?应该是没啥问题的,这能有什么问题?大致上看是没有什么问题的,问题在于你是怎么看待这个问题。


【设计模式】门面模式:接口就像门面,一眼就能看出你的代码水平

上面这幅图就是通过门面模式进行重构之后的流程,将原来需要请求的三个接口封装到了一个接口中,由接口0统一进行处理,将数据返回给调用方。


# 为什么要使用门面模式?

上面的案例中,浏览器需要调用三个接口才能拿到用户想要的信息,会浪费大量的网络请求,如果大部门的时间都消耗在网络请求上,那么性能自然收到了影响,所以,我们需要将一些有关联的接口封装到一个对面的接口中,这样,调用方只需要花费一次网络请求就能拿到他需要的所有数据。


这个时候你可能会有疑惑了,那我把所有的接口都通过门面模式进行一次封装,这样就能间接的提升程序的性能,这种想法是有问题的,如果将一些管联性不强的接口也封装起来,这样可能会适得其反。


那什么时候使用门面模式呢?下面我来介绍几种门面模式的应用场景。


门面模式应用场景

1。为了解决易用性问题:linux系统大家都用过吧,那对shell脚本应该有一点了解吧,它封装了linux底层的函数,暴漏给用户的命令都是一些容易理解的命令,其实它也相当于一个门面。


linux实现一个查找内存使用情况的命令可能相当的复杂,但是我们在linux系统上只需要输入:free -h 就能查看到详细的信息,这就是shell的功劳,简化了我们的操作,所以当我们想要让接口的调用变得更加简单的时候,可以尝试使用门面模式哦。


2.解决性能问题:它为什么能解决性能问题,在最上面的例子中已经说明了,这里就不再重复了。


3.解决分布式事务问题:分布式事务一直都是让开发者十分头痛的一个问题,比如一个用户买了商品,既要扣钱,又要生成订单,还要增加积分,但是用户系统、订单系统、积分系统都是属于单独的子系统,这个时候如果想保证他们要么同时成功,要么同时失败,是相当麻烦的,要么引入分布式事务插件、要么进行事后补偿机制,但是这两种实现起来都不是容易的事情,但是利用门面模式那就是两外一个故事了,我们只需要在一个新的子系统中,将这三个操作放到一个请求中就可以了哦,利用spring事务或者数据库事务,让他们在同一个方法中执行者三条sql,就能保证事务的一致性了。



总结

应用场景说的差不多了,下面我们一起来总结一下。


一个系统设计的好不好,从接口就能看的出来,如果一个接口设计的好,那么系统自然差不了,如果接口设计的自己都看不懂了,你觉得这个系统还会有人使用吗?


还有一点需要注意的就是代码的复用性,写代码的时候我们尽量要保证代码的可复用性,但是总有特殊情况,在特殊情况下,是可以允许冗余门面接口的,目的是为了保证接口的易用性。


上面还有一点没有说明,那就是门面模式的区分门面接口与普通接口呢?如果需要封装的接口不是很多,只需要将门面接口与普通的接口写在一起即可,没有必要区分,如果门面接口多而且类型砸,这个时候我们就可以新建一个门面的包,将我们的门面接口统一放到门面包中进行管理。


门面模式应该是23中设计模式中最简单并且可以让我们最自由发挥的设计模式了,很容易理解,也很容易实现,不过什么时候使用门面模式,大家心里还是需要有一杆秤。

                   



其他设计模式:




以上是关于设计模式门面模式:接口就像门面,一眼就能看出你的代码水平的主要内容,如果未能解决你的问题,请参考以下文章

java门面模式

门面模式

设计模式之门面模式(外观模式)

设计模式之门面模式(外观模式)

设计模式之门面模式

设计模式--门面模式C++实现