首页 > 其他 > 详细

适配器模式

时间:2015-03-24 22:49:47      阅读:292      评论:0      收藏:0      [点我收藏+]

前序

姚明,大家都认识吧。在他刚去NBA的时候,什么都听不懂,必须在旁边配个翻译,否则就无法听懂教练在说什么。这也正符合了设计模式中的一种模式:适配器模式。

适配器模式

将一个类的接口转换成客户希望的另外一个接口。适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。

实现方式(UML类图)

 

技术分享
实现代码

#include <stdio.h>

 

// 球员

class Player

{

public:

       Player(char* _name) : name(_name){}

      

       virtual void Attack()=0;

       virtual void Defense()=0;

 

       char* name;

};

 

// 前锋

class Forwards : public Player

{

public:

       Forwards(char* name) : Player(name){}

      

       virtual void Attack()

       {

              printf("前锋 %s 进攻\n", name);

       }

      

       virtual void Defense()

       {

              printf("前锋 %s 防守\n", name);

       }

};

 

// 中锋

class Center : public Player

{

public:

       Center(char* name) : Player(name){}

      

       virtual void Attack()

       {

              printf("中锋 %s 进攻\n", name);

       }

      

       virtual void Defense()

       {

              printf("中锋 %s 防守\n", name);

       }

};

 

// 后卫

class Guards : public Player

{

public:

       Guards(char* name) : Player(name){}

      

       virtual void Attack()

       {

              printf("后卫 %s 进攻\n", name);

       }

      

       virtual void Defense()

       {

              printf("后卫 %s 防守\n", name);

       }

};

 

// 外籍中锋

class ForeignCenter

{

public:

       void Attack()

       {

              printf("外籍中锋 %s 进攻\n", name);

       }

      

       void Defense()

       {

              printf("外籍中锋 %s 防守\n", name);

       }

      

       char* name;

};

 

// 翻译者

class Translator : public Player

{

public:

       Translator(char* name) : Player(name)

       {

              wjzf.name = name;

       }

      

       virtual void Attack()

       {

              wjzf.Attack();

       }

      

       virtual void Defense()

       {

              wjzf.Defense();

       }

protected:

       ForeignCenter wjzf;

};

 

int main()

{

       Player* b = new Forwards("巴蒂尔");

       b->Attack();      

       Player* m = new Guards("麦克格雷迪");

       m->Attack();      

       Player* ym = new Translator("姚明");

       ym->Attack();

       ym->Defense();      

       delete b;

       delete m;

       delete ym;      

       return 0;

}

运行结果

技术分享

适配器模式

原文:http://www.cnblogs.com/gaoxiangde/p/4364020.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!