大话设计模式C++实现-第17章-适配器模式

2015-01-24 05:39:20 · 作者: · 浏览: 3

一、UML图

\


二、概念

适配器模式:<??http://www.2cto.com/kf/ware/vc/" target="_blank" class="keylink">vc3Ryb25nPr2r0ru49sDgtcS907/a16q7u7PJv827p8+jzfu1xMHtzeLSu7j2vdO/2qGjQWRhcHRlcsSjyr3KubXD1K3AtNPJ09q907/asru85sjdtviyu8Tc0rvG8Lmk1/e1xMTH0KnA4L/J0tTSu8bwuaTX96GjPC9wPgo8cD48YnI+CjwvcD4KPHA+PHN0cm9uZz7I/aGiy7XD9zwvc3Ryb25nPjwvcD4KPHA+PHN0cm9uZz69x8mro7o8L3N0cm9uZz48L3A+CjxwPqOoMaOpVGFyZ2V0o7rV4srHv827p8v5xtq0/bXEvdO/2qOsVGFyZ2V0v8nS1MrHvt/M5bXEu/Kz6c/ztcTA4KOs0rK/ydLUyse907/aoaM8L3A+CjxwPqOoMqOpQWRhcHRlZaO60OjSqsrKxeS1xMDgoaM8L3A+CjxwPqOoM6OpQWRhcHRlcqO6zai5/dTaxNqyv7D817DSu7j2QWRhcHRlZbbUz/OjrLDR1LS907/a16q7u7PJxL+x6r3Tv9qhozwvcD4KPHA+PHN0cm9uZz7KssO0yrG68tPDo788L3N0cm9uZz48L3A+CjxwPqOoMaOp1NrP68q508PSu7j20tG05tTatcTA4KOstavKx8jnufvL+7XEvdO/2qOs0rK+zcrHy/y1xLe9t6i6zcTjtcTSqsfzsrvP4M2syrGjrL7N06a4w7+8wsfTw8rKxeTG98Sjyr2hozwvcD4KPHA+o6gyo6nTw8HLysrF5Mb3xKPKvaOsv827p7T6wuu/ydLUzbPSu7X308PNs9K7vdO/2r7N0NDBy6Os1eLR+b/J0tS4/LzytaWjrLj81rG906OsuPy99LTVoaM8L3A+CjxwPqOoM6Op0qrU2surt722vLK7zKvI3dLX0N64xLXEyrG68tTZyrnTw8rKxeTG98Sjyr3KysXko6y2+LK7ysfSu9PQsrvNrMrHvs3KudPDy/yhozwvcD4KPHA+PHN0cm9uZz48YnI+Cjwvc3Ryb25nPjwvcD4KPHA+PHN0cm9uZz7LxKGiQyYjNDM7JiM0MzvKtc/WPC9zdHJvbmc+PC9wPgo8cD6jqDGjqUFkYXB0ZXIuaDwvcD4KPHA+PC9wPgo8cHJlIGNsYXNzPQ=="brush:java;">#ifndef ADAPTER_H #define ADAPTER_H #include #include //Target,此处为运动员 class Player { protected: std::string name; public: Player(std::string name) { this->name=name; } virtual void Attack()=0; virtual void Defense()=0; }; //Adaptee,此处为外籍中锋,它的接口和Target的接口不一样,需要翻译来帮忙转换 class ForeignCenter { private: std::string name; public: void SetName(std::string name) { this->name=name; } std::string GetName() { return name; } void ForeignAttack() { std::cout<<"外籍中锋 "< SetName(name); } ~Translator() { delete wjzf; } void Attack() { wjzf->ForeignAttack(); } void Defense() { wjzf->ForeignDefense(); } }; //下面是普通的 接口和Target接口一样的 3个子类,必须要翻译 //前锋 class Forwards:public Player { public: Forwards(std::string name):Player(name){} void Attack() { std::cout<<"前锋 "<

(2)Client.cpp

#include "Adapter.h"
#include 
   
    
#include 
    
      #include 
     
       //Client void 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; system("pause"); }
     
    
   


(3)运行截图