gpt4 book ai didi

深入解析设计模式中的适配器模式在C++中的运用

转载 作者:qq735679552 更新时间:2022-09-27 22:32:09 25 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章深入解析设计模式中的适配器模式在C++中的运用由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.

适配器模式属于结构型的设计模式,它是结构型设计模式之首(用的最多的结构型设计模式)。 适配器设计模式也并不复杂,适配器它是主要作用是将一个类的接口转换成客户希望的另外一个接口这样使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。适配器模式有两种:1.类的适配器 2.对象适配器,对象适配器更多一些.

示例:比如你在网上买了一个手机,但是买家给你发回来了一个3接头的充电器,但是恰好你又没有3接头的插槽,只有2个接口的插槽,于是你很直然地便会想到去找你个3接口转两接口的转换器。简单的分析下这个转换器便是我们这里的适配器Adapter。三相插头便是我们要适配的Adaptee,两相插类适配器-----在我看来C++的类适配器的用多重继承实现,并提供适配后的接口.

深入解析设计模式中的适配器模式在C++中的运用

这是你的三相插头 。

?
1
2
3
4
5
6
7
8
class ThreePhaseOutlet
{
public :
   void doThreePhasePlugin()
   {
     cout<< "三相插头强势插入!" <<endl;
   }
};

这是你想要的两相插头 。

?
1
2
3
4
5
class TwoPhaseOutlet 
{
public :
   virtual void doPlugin() = 0;
};

  然后你将需要找到一个转接头,将三相插头转换为“两相插头” 。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
class OutletConvertor: public TwoPhaseOutlet, public ThreePhaseOutlet
{
public :
   void doPlugin()
   {
     doConvertor();
     doThreePhasePlugin();
   }  
     void doConvertor()
   {
     cout<< "三相插头转为两厢插头!" <<endl;
   }
};

现在你可以强势插入两相的插口了.

?
1
2
TwoPhaseOutlet* outlet = new OutletConvertor();
outlet->doPlugin();

对象适配器模式-----对象适配器是将需要适配的对象进行包装然后提供适配后的接口.

深入解析设计模式中的适配器模式在C++中的运用

对象适配器的 三相插口和转接头的代码和上面一致。只是整合步骤不一致 。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
class OutletConvertor : public TwoPhaseOutlet
{
public :
   void doPlugin()
   {
     doConvertor();
     m_out.doThreePhasePlugin();
   }
   void doConvertor()
   {
     cout<< "三相插头转为两厢插头!" <<endl;
   }
   ThreePhaseOutlet m_out;
};

对象适配器相比类适配器来说更加灵活,他可以选择性适配自己想适配的对象。例如我们下面把代码改成这样,你也许就会明白为什么我这样说:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
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、 带参数的适配器模式。使用这种办法,适配器类可以根据参数返还一个合适的实例给客户端.

最后此篇关于深入解析设计模式中的适配器模式在C++中的运用的文章就讲到这里了,如果你想了解更多关于深入解析设计模式中的适配器模式在C++中的运用的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com