facade-门面模式(外观模式)应该是我平时开发中用到的最多的模式了   。。。为了给大家一个简单的理解,我先阐述一个例子

假设现在有这么五个人  ,A是木工 ,B是水泥工 C是建筑师  D是包工头  E是房东   

ABC 都有自己的专长,他们只在自己的领域 做事  E现在需要建房子 ,那么正常情况他可能找ABC来做事 

但是这很麻烦 我要自己找这些人,还要分别和这些人谈价格,还要给这些人之间调节好关系。要是有一个人给我处理这些事多好。

这时候门面模式的核心角色-包工头shinny shinny 登场。。

下面我给大家写一个简单的代码帮助大家理解:

java 挡板模块_设计模式

假设现在有三个子系统 需要做三个不同的事情 ,正常情况下,我们现在需要做这三件事情可以通过client 分别调用,如下:

java 挡板模块_设计模式_02

那其实呢 ,如果是门面模式 该怎么写呢:

java 挡板模块_java 挡板模块_03

 

就是这样  ,我用一个门面代替子系统暴露给外面。。。。

总结一下:

门面模式特点:

1、子系统可以有选择的暴露方法

门面模式还有一个附带的好处,就是能够有选择性地暴露方法。一个模块中定义的方法可以分成两部分,一部分是给子系统外部使用的,一部分是子系统内部模块之间相互调用时使用的。有了Facade类,那么用于子系统内部模块之间相互调用的方法就不用暴露给子系统外部了。

2、一个门面模式可以有很多个门面类

在门面模式中,通常只需要一个门面类。如果一个系统有好几个子系统的话,每一个子系统都有一个门面类,整个系统可以有数个门面类。

3、不能为子系统增加新行为

门面模式的用意是为子系统提供一个集中化和简化的沟通管道,而不能向子系统加入新的行为。就比如包工头的作用只是调度其他人工作的,但是自己不工作。

4、松耦合、而且使用简单。

用户与子系统解耦,屏蔽子系统;可以提高子系统的独立性;并且客户类不需要知道子系统的内部构造。

可能有的攻城狮有点疑惑,这和代理模式有啥区别,看似好像一样呢,但是小编说:这两个还是有区别的:

比如说他们都引入了第三方,起到了代理的功能。

但是代理模式只代理一个类,而且代理类与原类实现相同的抽象。

门面类就不一样了,他代理的是一系列类,与子系统可以有不同的抽象。

最后小编再说说哪里有用到门面模式呢,,,tomcat 中就有一些应用,比如:

java 挡板模块_java 挡板模块_04

java 挡板模块_java 挡板模块_05

 

好的,门面模式小编就分享到这里啦。。。。。。希望对你有所帮助