打字猴:1.700466329e+09
1700466329 设计模式之禅 [:1700454003]
1700466330 设计模式之禅 19.2 适配器模式的定义
1700466331
1700466332 适配器模式(Adapter Pattern)的定义如下:
1700466333
1700466334 Convert the interface of a class into another interface clients expect.Adapter lets classes work together that couldn’t otherwise because of incompatible interfaces.(将一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作。)
1700466335
1700466336 适配器模式又叫做变压器模式,也叫做包装模式(Wrapper),但是包装模式可不止一个,还包括了第17章讲解的装饰模式。适配器模式的通用类图,如图19-4所示。
1700466337
1700466338
1700466339
1700466340
1700466341 图19-4 适配器模式通用类图
1700466342
1700466343 适配器模式在生活中还是很常见的,比如你笔记本上的电源适配器,可以使用在110~220V之间变化的电源,而笔记本还能正常工作,这也是适配器一个良好模式的体现,简单地说,适配器模式就是把一个接口或类转换成其他的接口或类,从另一方面来说,适配器模式也就是一个包装模式,为什么呢?它把Adaptee包装成一个Target接口的类,加了一层衣服,包装成另外一个靓妞了。大家知道,设计模式原是为建筑设计而服务的,软件设计模式只是借用了人家的原理而已,那我们来看看最原始的适配器是如何设计的,如图19-5所示。
1700466344
1700466345
1700466346
1700466347
1700466348 图19-5 两个已经成型的物体
1700466349
1700466350 A、B两个图框代表已经塑模成型的物体A和物体B,那现在要求把A和B安装在一起使用,如何安装?两者的接口不一致,是不可能安装在一起使用的,那怎么办?引入一个物体C,如图19-6所示。
1700466351
1700466352
1700466353
1700466354
1700466355 图19-6 引入物体C
1700466356
1700466357 引入物体C后,C适应了物体A的接口,同时也适应了物体B的接口,然后三者就可以组合成一个完整的物体,如图19-7所示。
1700466358
1700466359
1700466360
1700466361
1700466362 图19-7 完美组合
1700466363
1700466364 其中的物体C就是我们说的适配器,它在中间起到了角色转换的作用,把原有的长条形接口转换了三角形接口。在我们软件业的设计模式中,适配器模式也是相似的功能,那我们先来看看适配器模式的三个角色。
1700466365
1700466366 ❑Target目标角色
1700466367
1700466368 该角色定义把其他类转换为何种接口,也就是我们的期望接口,例子中的IUserInfo接口就是目标角色。
1700466369
1700466370 ❑Adaptee源角色
1700466371
1700466372 你想把谁转换成目标角色,这个“谁”就是源角色,它是已经存在的、运行良好的类或对象,经过适配器角色的包装,它会成为一个崭新、靓丽的角色。
1700466373
1700466374 ❑Adapter适配器角色
1700466375
1700466376 适配器模式的核心角色,其他两个角色都是已经存在的角色,而适配器角色是需要新建立的,它的职责非常简单:把源角色转换为目标角色,怎么转换?通过继承或是类关联的方式。
1700466377
1700466378 各个角色的职责都已经非常清楚,我们再来看看其通用源码,目标接口如代码清单19-8所示。
[ 上一页 ]  [ :1.700466329e+09 ]  [ 下一页 ]