定义:外观模式提供了一个统一的接口,用来访问子系统中的一群接口。外观定义了一个高层接口,让子系统更容易使用。
飞机驾驶舱不少人都见过,当看到那些密密麻麻的按钮时,心想要是能一键启动就好了。在代码的世界里,我们也常常遇到一个业务功能需要调用很多接口甚至很多系统的情况,就像下图:
1.png有时候被我们调用模块之间还需要互相调用,模块之间的关系都可以画出一张蜘蛛网。在这种情况下,要求开发者需要对每一个模块都有一定的了解,还需要了解他们之间的关系,开发一个功能的成本简直太高了,令人崩溃。
飞机驾驶舱的按钮由于某些原因不可能做成一键启动,但是我们的代码可以:
外观就是这个一键启动的按钮,它将多个模块或系统的代码进行了整合,而我们只要简单地调用外观暴露出来的一个接口。
这就是外观模式(也叫门面模式),其作用显而易见,就是提供一个简单接口来调用后方一群复杂的接口。
在外观模式中主要有三个角色:
1.子系统:已有模块或子系统,提供了一系列复杂的接口或功能
2.外观(门面):它了解子系统,并对外暴露一个简单的接口
3.客户:调用外观提供的接口来实现功能,无需了解复杂的子系统
迪米特法则(最少知道原则)
迪米特法则是说每一个类都应该尽量的少知道别的类,外观模式就是迪米特法则的应用。原本我们需要知道许多的子系统或接口,用了外观类之后,我们仅仅需要知道外观类即可。
换句话说就是:知道的太多对你没好处。
迪米特法则是希望类之间减少耦合,类越独立越好。有句话叫牵一发而动全身,如果类之间关系太紧密,与之关联的类太多,一旦你修改该类,也许会动到无数与之关联的类。
总结
外观模式主要使用场景:
1)包装多个复杂的子系统,提供一个简单的接口
2)重新包装系统,隐藏不想暴露的接口
优缺点
将复杂的接口简单化,减少了客户端与接口之间的耦合,提高了安全性。可能产生大量的中间类(外观类),一定程度上增加了系统的复杂度。
网友评论