设计模式之--适配器模式.

设计模式之--适配器模式.,第1张

概述在日常生活中,我们时常会遇到一些兼容性的问题,比如我的笔记本的电源插头就是欧标的,在很多场合我都没法用,买一个可以用的插座当然是可选手段,但到那里去都拿这么大个家伙一是不方便,二也未必有地方可以插,所以我只好买个电源适配插座带在身上。再比如电脑的输入电压一般都只有20伏左右,而日常电源基本都是220伏,所以就需要一个电源适配器,来降低电压。这些都是为了解决不同标准之间的兼容性问题。设计模式中的适配

在日常生活中,我们时常会遇到一些兼容性的问题,比如我的笔记本的电源插头就是欧标的,在很多场合我都没法用,买一个可以用的插座当然是可选手段,但到那里去都拿这么大个家伙一是不方便,二也未必有地方可以插,所以我只好买个电源适配插座带在身上。再比如电脑的输入电压一般都只有20伏左右,而日常电源基本都是220伏,所以就需要一个电源适配器,来降低电压。这些都是为了解决不同标准之间的兼容性问题。设计模式中的适配器模式就是我们在设计中用来解决标准兼容性问题的一种重要手段。适配器的角色分为适配器,适配对象和适配目标。适配对象是具体功能的执行者,但因接口原因用户无法直接调用,适配目标是用户希望的调用接口,适配器就继承适配目标,实现目标接口,接口的具体执行由保持的适配对象来执行。

适配器的应用场景:

1)需要使用一个已经存在的类,但这个类的接口标准不符合你的要求。分两种情况,一是老的系统中的类,但又不能修改这个类的接口(有的系统还需要使用,或者没有源代码),而现在又定义了新的标准。这在系统升级过程中很常见,二是该类属于第三方的类,可能你不想修改,或者也没法修改。这两种情况都要求你定义一个适配器类来解决这种不同标准时间的兼容问题;

2)需要定义一个能够被复用的类,而这个类能够与其它不相关的类或者不可预见的类一起协同工作,一个实现多个接口的类的目的往往就如此;

适配器的分类:

1)类适配器:适配器既实现目标接口,又适配对象继承。适配器在目标接口的实现中调用原对象的接口,达到接口转接的目的。但注意在类适配器模式中,目标接口只能用接口表示,不能采用类表示,因为这样会造成多继承出现。类适配器的好处是为适配对象增加部分功能比较容易(适配器作为适配对象子类,可以很方便的实现适配对象的访问)

2)对象适配器:适配器实现目标接口,但不从适配对象继承,而是维护一个对适配对象的引用,这样做的好处是在需要使用一些已经存在的子类,但是不可能对每个类都进行子类化以匹配它们的接口的时候,对象适配器可以通过适配
  它们的父类接口来实现对一系列子类的接口匹配,这也是类适配器不能做到的地方。但对象适配器也有缺点,因为是维护对适配对象的引用,而不是继承,因此在需要为适配对象增加功能时变得比较困难。

    对象适配器一般比较简洁,而类适配器则比较臃肿,因为大多时候采用适配器的地方,并不需要知道适配对象的很多细节,需要适配的接口都比较单一,这个时候采用对象适配器会比较好。类适配器不仅适配了接口,同时也继承了适配对象的很多其它功能,而且很容易暴露适配对象的细节。

与其它模式的关系:

1)与装饰模式相比,适配器模式是为了适配对象的接口,而装饰模式是为了增强对象的功能。装饰模式可以实现递归调用,而适配器模式则不能(对象适配器如果适配器是抽象的则可以,但一般不这么做,如果需要可以采用其它模式实现)。

2)桥模式和对象适配器有类似结构,但目的不一样,桥模式是为了接口与实现分隔开来以便利改变并使其不相关(抽象部分和实现部分各自独立变化),而对象型适配器的目的则是改变现有对象的接口。

3)代理模式的目的是为对象增加一个控制访问的中间代理,但它并不改变对象的接口,而适配器模式则是为了改变对象的接口,以适应新的接口标准,而不是为了增加附加性的功能(虽然也可以)。

另外,装饰模式,代理模式,适配器模式的作用比较相近,都是为了改变或增加对象的功能或者接口,而组合模式则是为了一致对待对象,同时提供了一种对象的组织方式。严格的将,在几个结构型模式中只有组合模式是完全意义上的结构模式。

 

后记:适配器的模式的关键在于接口适配。在新的系统设计开发中这种模式一般比较少用,而在系统重构或者已有系统维护中会使用一些。当然在新的系统中使用适配器也会存在,主要用于一些相似功能跨平台或多系统支持,比如silverlight的跨平台底层适配器层等。

总结

以上是内存溢出为你收集整理的设计模式之--适配器模式.全部内容,希望文章能够帮你解决设计模式之--适配器模式.所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1077191.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-26
下一篇 2022-05-26

发表评论

登录后才能评论

评论列表(0条)

保存