Chinaunix首页 | 论坛 | 博客
  • 博客访问: 170249
  • 博文数量: 60
  • 博客积分: 15
  • 博客等级: 民兵
  • 技术积分: 638
  • 用 户 组: 普通用户
  • 注册时间: 2010-11-26 10:59
个人简介

喜欢coding,因为那是一件伟大的事情,是将无生命的IC赋予灵魂的过程,让我拥有了和上帝一样的成就感。(w1c2g3@163.com)

文章分类

全部博文(60)

文章存档

2017年(7)

2016年(41)

2015年(1)

2014年(4)

2013年(7)

我的朋友

分类: C/C++

2016-10-30 22:49:54

适配器模式 将一个类的接口,转换成客户期望的另一个接口。适配器让原来接口不兼容的类可以合作无间。




  1. #include <iostream>
  2. #include <string>


  3. using namespace std;


  4. struct Duck {
  5.     virtual quack() = 0;
  6.     virtual fly() = 0;
  7. };

  8. struct MallardDuck : public Duck {
  9.     virtual quack() {
  10.         cout << "Quack" << endl;
  11.     }
  12.     virtual fly() {
  13.         cout << "I'm flying" << endl;
  14.     }
  15. };


  16. struct Turkey {
  17.     virtual gobble() = 0;
  18.     virtual fly() = 0;
  19. };

  20. struct WildTurkey : public Turkey {
  21.     virtual gobble() {
  22.         cout << "Gobble gobble" << endl;
  23.     }
  24.     virtual fly() {
  25.         cout << "I'm flying a short distance" << endl;
  26.     }
  27. };


  28. struct TurkeyAdapter : public Duck {
  29.     Turkey *turkey;

  30.     TurkeyAdapter(Turkey *mturkey) {
  31.         turkey = mturkey;
  32.     }

  33.     virtual quack() {
  34.         turkey->gobble();
  35.     }

  36.     virtual fly() {
  37.         for (int i = 0; i < 5; ++i) {
  38.             turkey->fly();
  39.         }
  40.     }
  41. };


  42. static testDuck(Duck *duck)
  43. {
  44.     duck->quack();
  45.     duck->fly();
  46. }

  47. int main(int argc, char **argv)
  48. {
  49.     MallardDuck *duck = new MallardDuck();

  50.     WildTurkey *turkey = new WildTurkey();
  51.     Duck *turkeyAdapter = new TurkeyAdapter(turkey);

  52.     cout << "The Turkey say..." << endl;
  53.     turkey->gobble();
  54.     turkey->fly();

  55.     cout << "\nThe Duck say..." << endl;
  56.     testDuck(duck);

  57.     cout << "\nThe TurkeyAdapter say..." << endl;
  58.     testDuck(turkeyAdapter);

  59.     return 0;
  60. }

阅读(647) | 评论(0) | 转发(0) |
0

上一篇:命令模式

下一篇:外观模式

给主人留下些什么吧!~~