咸鱼程序员之-java设计模式第七篇-门面模式

本文通过一个生动的例子介绍了门面模式(外观模式)的概念,解释了其如何简化子系统间的交互,减少客户端与多个子系统之间的耦合。文章还对比了门面模式与代理模式的区别,并列举了门面模式的特点。

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

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

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

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

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

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

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

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

 

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

总结一下:

门面模式特点:

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

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

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

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

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

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

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

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

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

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

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

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

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

 

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值