设计模式
外观模式
你打算去买一台计算机,但是你知道计算机由很多部件组成,主板、CPU、显卡、硬盘、内存、机箱、显示器、数据线组成。
所以下面你开始遍寻网络,发现每个配件都有许多商家提供的不同型号,而不同型号又有各自的优缺点和兼容性,不兼容的配件不能一起使用。你花了不少时间浏览网上信息,并终于选定了一组配件,其中每个配件都让你很满意,但是拼凑在一起竟然发现它们不兼容,你开始慌了。
外观(Facade)模式提供了统一的接口,用来访问子系统中的一群接口。外观定义了一个高层的接口,让子系统更容易使用。
在希望达成某个目标时,你可以将外观视作一个套餐,为你提供了你达成目标所需要的一切,这样你就可以不再关心子系统的选择和它们的独特性,而直接使用套餐快速地完成你的目标。
比如说你希望架设一组微服务,子系统包含ORM、容器、MVC框架、缓存等一堆内容,而spring boot和spring cloud就是你需要的套餐,你只需要直接向项目引入它们的依赖就可以快速搭建出微服务。
比如说你希望去旅游,子系统包含酒店,门票,住宿,导游等,旅行社就是你需要的套餐,你只需要联系他们预约,就可以轻松地外出旅游。
而在上面的案例中,组装好的成品机就是你需要的套餐,你仅需考虑他们整体的性价比而无需考虑兼容性问题。
对于外观模式来说最重要的就是使用简单,并且能覆盖大部分用户的需求。当然还是会存在一些用户的特殊需求是无法满足的,这时候只能请他自己直接调用子系统了。
外观模式的优点是可以解耦客户端和子系统,而将耦合内容集中在了外观上。