本文主要是看了《设计模式》做的笔记和思考,在此分享仅代表个人观点,如有不对的地方欢迎批评和指正。
应用场景
你有十个功能,其中有8个是常用的,这8个功能一般有明确的使用顺序并且总是一起使用,由于这8个功能也有拆开使用(或顺序不同)的情况,因此不便于将其全部整合为一个功能。如果你还是想更方便地满足日常需求,又能应对突发的奇怪需求,那么可以使用Facade模式。
基础
该模式的理念是用一个函数或者类来包装常用的函数,使得面向用户的接口更加简单。打个比方,你去肯德基,你想吃炸鸡翅、鸡块、玉米、鸡米花等等,你觉得挨个点太麻烦,又发现“全家桶”这个套餐正好都是你想吃的,那么你直接点一个“全家桶”就好,这个“全家桶”在设计模式中就是Facade函数或者类。其结构如下图所示,图来源于书本。
提醒
由于比较简单,加之很多人已经写得特别详细,本人就不给代码和图片了,但这里要提一些没什么人说过的事情。
- Facade模式虽然封装了一些常用的函数,但不代表你以后只能通过Facade执行它们,你还是可以执行原来的函数,这个要注意,容易遗忘;
- Facade模式可以用得更灵活些,即根据需求在Facade类中分成几个封装函数,也可以通过向Facade函数中传入参数来实现选择。
- 也许你觉得Facade函数就够了,但在一个很复杂的系统中,Facade类比函数好用,因为它进行了解耦,对用户而言它只需要记得有个Facade类就好,使得维护用户和整个系统间的接口时,仅需调整Facade类。