• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >C语言 > 深入解析设计模式中的适配器模式在C++中的运用

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

作者:黄花寒 字体:[增加 减小] 来源:互联网 时间:2017-05-28

黄花寒 通过本文主要向大家介绍了c++适配器,适配器设计模式,设计模式之适配器模式,java适配器设计模式,设计模式c++等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

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

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

201639180223272.jpg (542×198)

这是你的三相插头

class ThreePhaseOutlet 
{ 
public: 
  void doThreePhasePlugin() 
  { 
    cout<<"三相插头强势插入!"<<endl; 
  } 
}; 
</div>

这是你想要的两相插头

class TwoPhaseOutlet  
{ 
public: 
  virtual void doPlugin() = 0; 
}; 
</div>

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

class OutletConvertor: public TwoPhaseOutlet,public ThreePhaseOutlet 
{ 
public: 
  void doPlugin() 
  { 
    doConvertor(); 
    doThreePhasePlugin(); 
  }   
    void doConvertor() 
  { 
    cout<<"三相插头转为两厢插头!"<<endl; 
  } 
}; 
</div>

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

TwoPhaseOutlet* outlet = new OutletConvertor(); 
outlet->doPlugin(); 
</div>

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

201639180653299.jpg (528×198)

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

class OutletConvertor : public TwoPhaseOutlet 
{ 
public: 
  void doPlugin() 
  { 
    doConvertor(); 
    m_out.doThreePhasePlugin(); 
  } 
  void doConvertor() 
  { 
    cout<<"三相插头转为两厢插头!"<<endl; 
  } 
  ThreePhaseOutlet m_out; 
}; 
</div>

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

class OutletConvertor : public TwoPhaseOutlet 
{ 
public: 
  OutletConvertor(ThreePhaseOutlet out) 
  { 
    m_out = out; 
  } 
  void doPlugin() 
  { 
    doConvertor(); 
    m_out.doThreePhasePlugin(); 
  } 
  void doConvertor() 
  { 
    cout<<"三相插头转为两厢插头!"<<endl; 
  } 
  ThreePhaseOutlet m_out; 
}; 

</div>

我们在构造的时候将具体需要适配的适配对象传入,这样便可以根据传入不同的对象,从而对该对象进行适配。而类适配器却无法选择对象,他是对整个类进行适配。也就是把所有的三相插口全部转换为两相的,而不是针对某一个。


在以下各种情况下使用适配器模式:

1、 系统需要使用现有的类,而此类的接口不符合系统的需要。
2、 想要建立一个可以重复使用的类,用于与一些彼此之间没有太大关联的一些类,包括一些可能在将来引进的类一起工作。这些源类不一定有很复杂的接口。
3、 (对对象适配器而言)在设计里,需要改变多个已有子类的接口,如果使用类的适配器模式,就要针对每一个子类做一个适配器,而这不太实际。

Adapter模式在实现时有以下这些值得注意的地方:

1、 目标接口可以省略,模式发生退化。但这种做法看似平庸而并不平庸,它可以使Adaptee不必实现不需要的方法(可以参考Default Adapter模式)。其表现形式就是父类实现缺省方法,而子类只需实现自己独特的方法。这有些像模板(Template)模式。
2、 适配器类可以是抽象类。
3、 带参数的适配器模式。使用这种办法,适配器类可以根据参数返还一个合适的实例给客户端。

</div>
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

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

相关文章

  • 2017-05-28纯C语言:检索与周游广度深度遍历源码分享
  • 2017-05-28C++实现“隐藏实现,开放接口”的方案
  • 2017-05-28C++如何动态的生成对象详解
  • 2017-05-28常用C/C++预处理指令详解
  • 2017-05-28C++ vector的用法小结
  • 2017-05-28深入ORACLE变量的定义与使用的详解
  • 2017-05-28C语言实现查询自动售货机中的商品价格【实例分享】
  • 2017-05-28浅谈时间戳与日期时间互转C语言
  • 2017-05-28电脑开机时间的计算代码
  • 2017-05-28STL list链表的用法详细解析

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • C/C++程序开发中实现信息隐藏的三种类型
    • C语言实现汉诺塔游戏
    • C++ decltype类型说明符
    • 深入jaxb xjc编码问题的详细介绍
    • C语言实现排序算法之归并排序详解
    • 深入理解堆排序及其分析
    • C++初始化函数列表详细解析
    • C++ 处理中文符号实例详解
    • C++中的while循环和for循环语句学习教程
    • C++中“#”号的使用技巧

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有