gpt4 book ai didi

C++设计模式之适配器模式(Adapter)

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

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

这篇CFSDN的博客文章C++设计模式之适配器模式(Adapter)由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.

适配器模式顾名思义在于接口的转换,最形象的例子就如两口转三口电源适配器,口子的数量可以理解为参数数量,一如我们调用三个参数的接口,而提供的接口只有两个参数,那么久需要适配器类进行接口的扩展改造,这就是适配器模式存在的最主要意义.

作用 。

将一个类的接口转换成客户希望的另外一个接口,使得原本由于接口不兼容而不能一起工作的那些类可以一起工作,使控制范围之外的一个原有对象与某个接口匹配。适配器模式主要应用于希望复用一些现存的类,但是接口又与复用环境要求不一致的情况。 想使用一个已经存在的类,但如果它的接口,也就是它的方法和你的要求不相同时,就应该考虑用适配器模式.

类视图 。

类模式适配器 。

C++设计模式之适配器模式(Adapter)

对象模式适配器 。

C++设计模式之适配器模式(Adapter)

代码实现 。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
//目标接口类,客户需要的接口
class Target
{
public :
   Target(){}
   virtual ~Target(){}
   virtual void Request() //定义新的标准接口
   {
     cout << "Request" << endl;
   }
};
 
//需要适配的类
class Object
{
public :
   Object(){}
   ~Object(){}
   void SpecificRequest()
   {
     cout << "SpecificRequest" << endl;
   }
};
 
//类模式,适配器类,通过public继承获得接口继承的效果,通过private继承获得实现继承的效果
class Adapter : public Target, private Object
{
public :
   Adapter(){}
   ~Adapter(){}
   virtual void Request() //实现Target定义的Request接口
   {
     cout << "AdapterRequest" << endl;
     this ->SpecificRequest();
     cout << "----------------------------" << endl;
   }
};
 
//对象模式,适配器类,继承Target类,采用组合的方式实现Object的复用
class Adapter1 : public Target
{
public :
   Adapter1(Object* adaptee) :_adaptee(adaptee)
   {}
   Adapter1() :_adaptee( new Object)
   {}
   ~Adapter1(){}
   virtual void Request() //实现Target定义的Request接口
   {
     cout << "Adapter1Request" << endl;
     _adaptee->SpecificRequest();
     cout << "----------------------------" << endl;
   }
private :
   Object* _adaptee;
};
 
//client调用
int main()
{
   //类模式Adapter
   Target* pTarget = new Adapter();
   pTarget->Request();
 
   //对象模式Adapter1
   Adaptee* ade = new Adaptee();
   Target* pTarget1= new Adapter1(ade);
   pTarget1->Request();
 
   //对象模式Adapter2
   Target* pTarget2 = new Adapter1();
   pTarget2->Request();
 
   return 0;
}

在Adapter模式的两种模式中,有一个很重要的概念就是接口继承和实现继承的区别和联系。接口继承和实现继承是面向对象领域的两个重要的概念,接口继承指的是通过继承,子类获得了父类的接口,而实现继承指的是通过继承子类获得了父类的实现(并不统共接口)。在C++中的public继承既是接口继承又是实现继承,因为子类在继承了父类后既可以对外提供父类中的接口操作,又可以获得父类的接口实现。当然我们可以通过一定的方式和技术模拟单独的接口继承和实现继承,例如我们可以通过private继承获得实现继承的效果(private继承后,父类中的接口都变为private,当然只能是实现继承了。),通过纯抽象基类模拟接口继承的效果,但是在C++中pure virtual function也可以提供默认实现,因此这是不纯正的接口继承,但是在Java中我们可以interface来获得真正的接口继承了.

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我.

原文链接:http://www.cnblogs.com/chencarl/p/8570892.html 。

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

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