适配器模式:将一个类的接口转换成客户希望的另外一个接口,Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。
适用场景:使用一个已经存在的类,但如果它的接口,也就是它的方法和你的要求不相同时,就应该考虑使用适配器模式。两个类所做的事情相同或相似,但是具有不同的接口时要使用它。
//player.h
//#ifdef _PLAYER_H //#define _PLAYER_H #pragma once #include <iostream> #include <string> #include "ForeignCenter.h" using namespace std; class Player{ protected: string name; public: Player(string name){ this->name = name; } virtual void attack()=0; virtual void defense()=0;
virtual ~Player(){}; }; class Forwards:public Player{ public: Forwards(string name):Player(name){} void attack(); void defense(); ~Forwards(); }; class Center:public Player{ public: Center(string name):Player(name){} void attack(); void defense(); ~Center(); }; class Guards:public Player{ public: Guards(string name):Player(name){} void attack(); void defense(); ~Guards(); }; class Translator:public Player{ private: ForeignCenter *fc ; public: Translator(string name):Player(name){ fc = new ForeignCenter(); fc->setName(name); } void attack(); void defense(); ~Translator(); }; //#endif
//palyer.cpp
#include "player.h" #include <iostream> using namespace std; void Forwards::attack(){ cout << name << "attack"<<endl; } void Forwards::defense(){ cout << name << "defense"<<endl; } Forwards::~Forwards(){ cout << "~Forwards()" << endl; } void Center::attack(){ cout << name << "attack"<<endl; } void Center::defense(){ cout << name << "defense"<<endl; } Center::~Center(){ cout << "~Center()" << endl; } void Guards::attack(){ cout << name << "attack"<<endl; } void Guards::defense(){ cout << name << "defense"<<endl; } Guards::~Guards(){ cout << "~Guards()" << endl; } void Translator::defense(){ fc->fangyu(); } void Translator::attack(){ fc->jingong(); } Translator::~Translator(){ cout << "~Translator()" << endl; delete fc; fc = NULL; }
//foreigncenter.h
//#ifdef _FOREIGNCENTER_H //#define _FOREIGNCENTER_H #pragma once #include <iostream> #include <string> using namespace std; class ForeignCenter{ private : string name; public: void setName(string name){ this->name = name; } string getName(){ return this->name; } void jingong(){ cout << "ForeignCenter"<<name<<" attack" <<endl; } void fangyu(){ cout << "ForeignCenter"<<name<<" defense" <<endl; } ~ForeignCenter(){ cout << "~ForeignCenter()" << endl; } }; //#endif
//main.cpp
#include <iostream> #include <cstdlib> #include "player.h" using namespace std; int main(){ Player *p = new Forwards("frads"); p->attack(); p->defense(); Player *p1 = new Translator("姚明"); p1->attack(); p1->defense(); delete p;p = NULL; delete p1;p1 = NULL; return 0; }