文档章节

小菜学设计模式——外观模式

learn_more
 learn_more
发布于 2015/06/10 13:00
字数 720
阅读 304
收藏 10

#程序员薪资揭榜#你做程序员几年了?月薪多少?发量还在么?>>>

背景

   一个坦克系统,子系统是履带系统,发动机系统,火炮系统,防卫装甲系统等。对外的接口就是暴露给使用人员的是Run(), shot(), stop()等。如果没有采用Facade模式,开动坦克需要直接依赖履带系统,发动机系统。直接去操作履带,操作发动机?各个接口和子系统都产生了紧耦合。(引用自互联网)

    问题产生了:组件的客户(接口)和组件内各个复杂子系统有过多的耦合,随着外部客户程序和各个子系统的变化,这种耦合面临着变化的挑战。 

    如何简化外部客户程序和系统间的交互接口,如何将外部程序的演化和内部子系统的变化解耦? 

    使该简单的简单!不管内部实现怎么变化,我们只要Run(), shot(), stop()!

1、使用意图

    为子系统中的一组接口提供一个一致的界面,Facade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用

2、生活实例

    外观模式为子系统中的接口定义了一个统一的更高层次的界面,以便于使用。当消费者电话订购时,则体现了一个外观模式。消费者拨打一个号码与客服代表联系,客服代表则扮演了这个"外观",他包含了与订货部、收银部和送货部的接口。

3、Java 例子(框架、JDK 、JEE)

    TIka,Apache的一个文本内容抓取框架,Tika中的Tika类采用了外观模式,这个类主要集成了语言识别、内容解析、类型识别;Tika类通过外观模式把上面几个类的功能都统一了接口对外出来,也就是parser方法,在parser方法内部自己调用这些小模块完成整个功能!

4、模式类图

5、模式优点

    1. 为一个复杂子系统提供一个简单接口;

    2. 提高子系统的独立性;

    3. 在层次化结构中,可以使用Facade模式定义系统中每一层的入口。

6、与类似模式比较

    1、Facade设计模式更注重从架构的层次去看整个系统,而不是单个类的层次。Facade很多时候更是一种架构设计模式。

    2、Facade更注重简化接口,Adapter模式注重转换接口,Bridge模式注重分离接口(抽象)与其实现,Decorator模式注重稳定接口的前提下为对象扩展功能。


© 著作权归作者所有

learn_more
粉丝 93
博文 240
码字总数 210196
作品 0
深圳
程序员
私信 提问
加载中

评论(2)

甩葱哥
甩葱哥
言简意赅很管用
小弓长
小弓长
很不错的文章
设计模式学习目录,仿佛看见了一道光给作者点赞666

史上最全设计模式导学目录(完整版) 原创 2013年12月24日 23:15:16 标签: 软件工程 / 设计模式 / 博客 / 软件开发 190146 圣诞献礼! 2012年-2013年,Sunny在CSDN技术博客中陆续发表了100...

osc_iiheq33y
2018/01/16
17
0
小菜学设计模式——设计模式总结之结构型

1、设计模式总结 设计模式总共23个,但是常用的不到10个,下面就把这23个设计模式进行整理归类,具体如下: 1)创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型...

learn_more
2015/07/06
232
0
迈向大牛的重要一步——掌握设计模式

IT职场的小菜经常有这样的疑问: 为什么一个相似的功能,大牛一会儿就搞定,然后悠闲地品着下午茶逛淘宝;而自己加班加点搞到天亮还做不完。 为什么用户提出需求变更后,大牛只需潇洒地敲敲键...

一枚Sir
2015/04/10
369
0
java架构之路-(设计模式)五种创建型模式之单例模式

  设计模式自身一直不是很了解,但其实我们时刻都在使用这些设计模式的,java有23种设计模式和6大原则。 设计模式是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使...

osc_b7lz7dji
04/16
6
0
设计模式什么的哪有那么神秘 ----第一集 一些吐槽和重构的韵味

一日面试, ...... Hr:你对设计模式熟悉吗? 应聘者A:我了解常用的设计模式,平时经常使用工厂模式和单例模式.而且我也看过一些讲23种设计模式的书.其他不常用的模式用的不是太熟. Hr:你用过外观...

架构梦想
2013/08/04
423
7

没有更多内容

加载失败,请刷新页面

加载更多

2020淘宝618理想生活列车自动领喵币脚本

自动收喵币 脚本 使用教程(测试安卓手机可用) 第一步安装 auto.js 第二步录入脚本 脚本 欢迎大家在评论区反馈,方便作者修改脚本 //by 丈二auto.waitFor();var height = device.height;...

osc_7oc4d1en
59分钟前
37
1
openlayers6聚合图(附源码下载)

前言 之前写过一篇openlayers4版本的地图聚合图文章,但是由于是封装一层 js代码写的,很多初学者看起来比较有点吃力,所以本篇文章重新写一篇地图热力图文章,直接基于最新版本openlayers6...

osc_4qu6doqx
今天
36
0
查找感兴趣的基因、基因组区域是否有调控元件的在线网页工具EpiRegio

前几天,Nucleic Acids Res新发了一篇文章,关于查找基因组调控元件的网页在线工具EpiRegio:https://epiregio.de/。 具体来说,该工具有以下三个功能: 1)通过给定一系列的感兴趣基因,查找...

osc_doeya1ck
今天
17
0
【Gradle教程】Gradle 入门

本文为我在学习群内分享时在B站直播时的文档,直播间地址 http://live.bilibili.com/22263819 PS:问一下,Linux下有什么好用的会议软件么? 知道的朋友烦请评论告知,感谢 00.简介 Gradle 是...

osc_cyn8i2xg
今天
24
0
加密后的PDF文档怎么解除密码?迅捷PDF转换器手把手教你操作!

加密后的PDF文档怎么解除密码?很多人在拿到一些珍贵的文档之后,喜欢自己先进行阅读和学习,为了避免泄露甚至会给文档进行加密,在学习完成想要进行分享的时候却发现,不知道该如何解除PDF...

dawda
今天
33
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部