版权声明:本文为博主原创文章,未经博主同意不得转载。 https://blog.csdn.net/walkerkalr/article/details/29863177

模式定义:

        适配器模式将一个类的接口。转换成客户期望的还有一个接口。适配器让原本接口不兼容的类能够合作无间。

        适配器能够分为类适配器和对象适配器。

        类适配器使用多重继承对一个接口与还有一个接口进行匹配。

        对象适配器依赖于对象组合。

 

客户使用适配器的过程:

1.      客户通过目标接口调用适配器的方法对适配器发出请求。

2.      适配器使用被适配者接口把请求转换成被施培者的一个或多个调用接口

3.      客户接收到调用的结果,但并未察觉这一切是适配器在起转换作用。

模式结构:

        类适配器

对象适配器

举例:

如今如果你缺少鸭子对象(叫声为Quack,飞行输出”I’m flying !”),想用一些火鸡对象(叫声为”Gobble gobble” 飞行输出”I’m flying a short distance!”)来冒充。显而易见。由于火鸡的接口(行为)不同,所以我们不能公然拿来使用。

UML设计:

编程实现及运行结果:

#include <iostream>

using namespace std;
//定义鸭子类
class Duck
{
public:
virtual void quack(){};
virtual void fly(){};
};
//定义绿头鸭
class MallardDuck : public Duck
{
public:
void quack()
{
cout << "Quack" << endl;
} void fly()
{
cout << "I'm flying" << endl;
}
};
//定义火鸡
class Turkey
{
public:
virtual void gobble(){}
virtual void fly(){}
};
//定义野火鸡
class WildTurkey : public Turkey
{
public:
void gobble()
{
cout << "Gobble gobble" << endl;
}
void fly()
{
cout << "I'm flying a short distance" << endl;
}
};
//定义火鸡适配器
class TurkeyAdapter : public Duck
{
public:
TurkeyAdapter(Turkey* tur):turkey(tur){} void quack()
{
turkey->gobble();
}
void fly()
{
turkey->fly();
}
private:
Turkey* turkey;
};
//客户代码
int main()
{
Duck* duck = new MallardDuck();
duck->quack();
duck->fly(); Duck* turkeyAdapter = new TurkeyAdapter(new WildTurkey());
turkeyAdapter->quack();
turkeyAdapter->fly();
return 0;
}

运行结果:

Quack

I'mflying

Gobblegobble

I'mflying a short distance

请按随意键继续. . .

 

适配器和装饰者模式比較:

适配器:将一个接口转成还有一个接口。包装某些对象,让它们的接口看起来不像自己而像别的东西。

装饰者:不改变接口,但增加责任。

将对象包装起来。让新行为增加类中。

 

最新文章

  1. 【Android】纯代码创建页面布局(含异步加载图片)
  2. 2016弱校联盟十一专场10.5---As Easy As Possible(倍增)
  3. 2016 大连网赛---Different GCD Subarray Query(GCD离散+树状数组)
  4. 【凯子哥带你学Framework】Activity界面显示全解析
  5. enum使用
  6. MacOS显示和不显示隐藏文件
  7. MSSQLSERVER数据库- 打开表出现目录名无效
  8. windows安装composer方法和使用方法
  9. JavaScript中Null和Undefined的深渊
  10. Listview右侧 IndexBar
  11. BNU OJ 51005 BQG&#39;s Quadrilateral Bricks
  12. id 生成器介绍
  13. JAVA WEB之Spring4.x JdbcTemplate
  14. ROS_Kinetic_03 ROS入门向导
  15. SharePoint布局页创建(实战)
  16. Accumulation Degree
  17. ActiveMq实例
  18. strtol详解
  19. jquery 之ajax,get,post异步请求简单代码模版
  20. Win10 JDK 配置

热门文章

  1. CheckBox和richTextBox
  2. webservice文件上传下载
  3. string--C++ STL 学习
  4. BI开发之——Mdx基础语法(转至指尖流淌)
  5. APP纯黑盒测试—某些可以试试的操作
  6. CLion 2017 注册码
  7. Linux中安装配置hadoop集群
  8. c# word excel 二进制 存入数据库
  9. 使用cordova+Ionic+AngularJs进行Hybird App开发的环境搭建手冊
  10. C语言程序真正的启动函数