时间:2021-05-19
适配器模式属于结构型的设计模式,它是结构型设计模式之首(用的最多的结构型设计模式)。
适配器设计模式也并不复杂,适配器它是主要作用是将一个类的接口转换成客户希望的另外一个接口这样使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。适配器模式有两种:1.类的适配器 2.对象适配器,对象适配器更多一些。
示例:比如你在网上买了一个手机,但是买家给你发回来了一个3接头的充电器,但是恰好你又没有3接头的插槽,只有2个接口的插槽,于是你很直然地便会想到去找你个3接口转两接口的转换器。简单的分析下这个转换器便是我们这里的适配器Adapter。三相插头便是我们要适配的Adaptee,两相插类适配器-----在我看来C++的类适配器的用多重继承实现,并提供适配后的接口。
这是你的三相插头
class ThreePhaseOutlet { public: void doThreePhasePlugin() { cout<<"三相插头强势插入!"<<endl; } };这是你想要的两相插头
class TwoPhaseOutlet { public: virtual void doPlugin() = 0; };
然后你将需要找到一个转接头,将三相插头转换为“两相插头”
现在你可以强势插入两相的插口了。
TwoPhaseOutlet* outlet = new OutletConvertor(); outlet->doPlugin();对象适配器模式-----对象适配器是将需要适配的对象进行包装然后提供适配后的接口。
对象适配器的 三相插口和转接头的代码和上面一致。只是整合步骤不一致
class OutletConvertor : public TwoPhaseOutlet { public: void doPlugin() { doConvertor(); m_out.doThreePhasePlugin(); } void doConvertor() { cout<<"三相插头转为两厢插头!"<<endl; } ThreePhaseOutlet m_out; };对象适配器相比类适配器来说更加灵活,他可以选择性适配自己想适配的对象。例如我们下面把代码改成这样,你也许就会明白为什么我这样说:
class OutletConvertor : public TwoPhaseOutlet { public: OutletConvertor(ThreePhaseOutlet out) { m_out = out; } void doPlugin() { doConvertor(); m_out.doThreePhasePlugin(); } void doConvertor() { cout<<"三相插头转为两厢插头!"<<endl; } ThreePhaseOutlet m_out; };我们在构造的时候将具体需要适配的适配对象传入,这样便可以根据传入不同的对象,从而对该对象进行适配。而类适配器却无法选择对象,他是对整个类进行适配。也就是把所有的三相插口全部转换为两相的,而不是针对某一个。
在以下各种情况下使用适配器模式:
1、 系统需要使用现有的类,而此类的接口不符合系统的需要。
2、 想要建立一个可以重复使用的类,用于与一些彼此之间没有太大关联的一些类,包括一些可能在将来引进的类一起工作。这些源类不一定有很复杂的接口。
3、 (对对象适配器而言)在设计里,需要改变多个已有子类的接口,如果使用类的适配器模式,就要针对每一个子类做一个适配器,而这不太实际。
Adapter模式在实现时有以下这些值得注意的地方:
1、 目标接口可以省略,模式发生退化。但这种做法看似平庸而并不平庸,它可以使Adaptee不必实现不需要的方法(可以参考Default Adapter模式)。其表现形式就是父类实现缺省方法,而子类只需实现自己独特的方法。这有些像模板(Template)模式。
2、 适配器类可以是抽象类。
3、 带参数的适配器模式。使用这种办法,适配器类可以根据参数返还一个合适的实例给客户端。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
本文实例讲述了Java适配器模式应用之电源适配器功能。分享给大家供大家参考,具体如下:一、模式定义存在两种适配器模式1对象适配器模式,在这种适配器模式中,适配器
本文深入浅出的讲述了设计模式中的适配器模式,并给出了简单的示例,例子浅显易懂,并附带源代码。 适配器模式中的有以下的四种角色:目标(target):定义客户端
本文实例讲述了PHP设计模式之适配器模式原理与用法。分享给大家供大家参考,具体如下:一、什么是适配器模式适配器模式有两种:类适配器模式和对象适配器模式。其中类适
java中设计模式之适配器模式前言:适配器模式可以将一个类或接口应用于另一个不同但是却有联系的接口,主要的做法是通过声明一个目标接口的实现类,在该类中声明一个将
感谢《Android源码设计模式解析与实战》何红辉关爱民著适配器模式在我们的开发中使用率极高,从代码中随处可见的Adapter就可以判断出来,从最早的ListV