在一文了解MVI架构,学起来吧~这篇文章的最后,我们提到了对网域层的理解类似于门面模式,所以这里单独写一篇文章介绍一下门面模式。
面试的时候,面试官都会问用过什么设计模式,99%程序员的回答都是 单例模式,在多一点就是工厂模式。如果你能说到门面模式相信已经在面试官心中战胜了80%的人。那么什么是门面模式呢?
门面模式又叫做外观模式(Facade Design Pattern),是结构型设计模式的一种。我觉得也是设计模式中不管是应用场景还是实现方法最为简单的一种。门面模式简单的说就是为各个子系统提供统一的接口,使得子系统更易用。
我来举个例子 ,相信每个Android开发工程师是最有感触的。
我们以支付宝App为例(并不是支付宝的实现方案),比如我们现在有四个接口,其接口功能对应如下:
接口名称 | 接口作用 |
---|---|
A | 获取个人信息 |
B | 获取首页菜单数据 |
C | 获取实时咨询 |
这三个接口可能在“我的”等页面单独使用,但是在首页这个复杂的页面中,可能要同时获取个人信息、首页菜单数据、获取实时咨询。但是对服务器接口而言,这三个接口都是已经存在的。所以很多App的做法就是 直接在首页这个页面同时调用三个接口甚至更多。而频繁调用接口也增加了App与服务器之间的网络通信次数。
所以很多时候,最怕产品突然说“首页在加个***”,更怕服务器说 “我们再提供一个新接口***”,导致首页变得加载的越来越慢。关于这一点相信各位Android开发工程师都深有感触吧~
而使用门面模式就可以很容易的解决这个问题。再来回顾一下在上篇文章中对网域层的介绍。
现在有接口A、B、C、D。业务系统1模块需要调用ABC三个接口,业务系统2模块需要调用BCD接口。利用门面模式,我们新建两个门面接口分别提供给业务系统1和业务系统2使用。这里具体如何做就没必要举具体的例子了,因为只是接口的整合。在现有接口基础上,再多抽象一层用来放门面接口即可。再回到具体的App问题,我觉得处理的难点是,你如何说服服务器让他把N个接口做成一个门面接口呢,这个就靠个人魅力了。
除此之外,门面模式也可以很好的解决分布式中的事务问题,以及我们经常使用的Linux Shell命令都是门面模式的应用。
好了,了解到了这些,你已经掌握了门面模式的全部知识了。这样你是否对MVI中的网域层有了更深的了解呢?
设计模式是非常重要的基础知识,是架构搭建、写好代码的基础支撑。如果你想学习其他的设计模式,欢迎评论区告诉我,你说我来写~