Chapter 7 the Adapter and Facade Patterns(Being Adaptive)

它有啥用?

包裹一些对象,让它们看起来不像它们,而像别的东西。
这个模式实现的功能是把一个接口应用于一个适用于另一个接口的类。
该模式能通过包裹对象的方式来简化接口。
这个模式的中文名称应该叫啥呢?我不想翻译得太机械。
P248的图非常形象地解释了这个模式——这个模式就是提供了一个中间层和转换器的功能。
所以这个模式应该翻译成适配器和外观模式。

什么是适配器模式?

整个适配器模式的逻辑结构就是P253所表示的那样。
客户按照目标接口的标准来实现,适配器也按照目标接口的标准来实现的,但是目标是按照目标的接口来实现的。那么适配器和目标的接口标准不同,它们是怎么相互对接的呢?原来适配器的实现里面复合地包含了一个目标的实例对象在里面。我想这个目标接口应该就是与目标相适配的接口,如果拿插头和插座来比拟的话,就应该是能够插进某个插座的插头类型。

它的一般流程

1、因为客户和适配器都实现了相同的目标接口,所以客户可以调用目标接口中的方法向适配器发送一个请求。
2、适配器接收到来自客户的请求就把它们转化成一个或多个目标所能接受的请求。
3、在此过程中目标和客户都不知道适配器的存在。

适配器的精髓

适配器模式的核心就是把一个接口转换成另一个接口。
适配器模式只包含一个目标接口实例。
适配器模式可以通过实现多个接口来实现来充当多功能适配器。

Adapter Pattern defined

它把一个接口转换成客户所需要的接口,该模式可以让那些原本因为不兼容而无法协同使用的类共同协作。
P255的类图清晰地显示了该模式的逻辑组织。

Object and class adapters

其实,适配器模式分为两种,一个叫对象适配器,另一个叫类适配器
以前讲的都是对象适配器模式,现在要讲的是类适配器模式。
之所以在前面作者没有提到是因为,类适配器模式需要多重继承,而JAVA不支持多重继承,但是C++可以。
与对象适配器模式不同的是,类适配器模式使用的是继承而不是复合,P256的类图非常清晰地说明了这一点。
适配器是通过同时继承目标类和被适配类的方式来达到二者的兼容的,而对象适配器是通过复合被适配类的对象来达到此目的的。

它俩各自的优劣

对象适配器模式不仅可以适配某一个类而且能适配它所有的子类类型,而类适配器模式则不行,但是它能重写被适配类的某些方法,因为它是继承。
由于前者使用的是复合因此其灵活性很好,但是因为后者用的是继承,所以后者的效率较高,因为无论是适配还是被适配都是一个类。

Real world adapters

从这段描述可以看出适配器模式可以解决新旧版本代码过渡的问题,添加个中间层完美地完成过渡。
P261中的虚箭头代表继承,实箭头代表复合,反正这是我猜的。

装饰者模式和适配器模式的区别

装饰者模式是不断地滚雪球,不断地增加功能,而适配器模式只是个中间层,转换器。
装饰者模式的耦合度比适配器模式要大。
装饰者模式不转换接口,而适配器模式转换接口。
装饰者模式侧重于功能的扩展,而适配器模式侧重于功能的转换。

The Façade Pattern

外貌模式旨在屏蔽一个或多个类的复杂性,而流出一个简单的接口出来,它的意义就在于简化接口复杂性。
怎么说呢,我们做一件事总希望一步搞定,但实际上一件事涉及到很多琐碎的细节,这些细节都是我们不想搭理的,那么外貌模式可以来处理这些细节让我们的操作更加方便。
外观模式可以让你接受一个复杂的系统,并通过实现一个外观类,从而向外界提供一个或多个接口的来简化使用。
那个外观类就像一个遥控器,那个系统就负责完成遥控器上的功能。
外观模式的作用不仅仅是简化一个接口那么简单,而是把用户和具体的子系统的耦合解开。
外观模式不是封装了一个大型的功能,它只是提供了一个接口而已,你仍然可以去访问那个系统,去使用你想用的更加具体的功能。
外观模式并没有增加新的行为,但是它足够智能地控制这些行为,就是能实现自动化。
适配器模式的作用是要去改变一个接口以适应用户的需求,而外观模式是提供了一个简化的接口给用户。
一个系统可能有n个外观接口。
P274内容把接口的内部实现细节展现了出来,其实很简单,就是按顺序把各个方法罗列出来就好了。

Facade Pattern defined

针对于一个子系统的若干个接口提供一个统一的接口。外观模式定义了一种更高层次的接口,它使子系统更加方便使用。

The Principle of Least Knowledge原则

“只与直接朋友对话”。
这个原则的意思是尽量减少对象之间的互动,只与极为有限的几个“伙伴”保持联系。
它提醒你要注意互动的类的个数以及方式。

How NOT to Win Friends and Influence Objects原则

这个原则告诉我们应该调用归属于如下4个方面的方法:
1、本对象。
2、以该对象为参数的方法。
3、属于本方法所创建或实例化的对象的方法。
4、该对象的任何组件的方法。
这4个方面说明不要调用从其他方法返回的对象的方法,如果你确实这样做了,那就意味着你在和另外一个对象某部分发生依赖,这就增加了有关联的对象的数量,这不符合原则。如果这种情况无法避免,我们会让那个对象为我们完成需求。
虽然这个做法的精髓我还不太理解,但是看P278的例子,我稍微明白好像就是避免自己创建对象,能直接用别人的就直接用别人的。

Keeping your method calls in bounds...

P279具体地说明你可以调用哪些方法,这是很好的例子。
the Principle of Least Knowledge的缺点:它导致了更多的包装类 ,它们负责控制对其他组件的调用,这会导致复杂性的增加和开发时间的增长。
The Facade and the Principle of Least Knowledge
不管怎样,外观模式始终只有一个面向用户的接口,其下有很多子类,每个子类发生更改并不影响其他,这很符合Least Knowledge原则。
但是子系统实在过于复杂的话,你可以有多于一个的接口。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,560评论 4 361
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,104评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,297评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,869评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,275评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,563评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,833评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,543评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,245评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,512评论 2 244
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,011评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,359评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,006评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,062评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,825评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,590评论 2 273
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,501评论 2 268

推荐阅读更多精彩内容