《大话模式》
适配器模式,将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能
一起工作的那些类可以一起工作。
//adapter.h
#ifndef _ADAPTOR_H_
#define _ADAPTOR_H
#include <iostream>
#include <string>
using namespace std;
class Player
{
public:
Player(const string &na):name(na) {}
virtual ~Player()
{
cout << "In base destructor " << endl;
}
virtual void attack() = 0;
virtual void defense() = 0;
protected:
string name;
};
class Forwards:public Player
{
public:
Forwards(const string &na):Player(na) {}
~Forwards()
{
cout << "In Forwards destructor " << endl;
}
void attack();
void defense();
};
class Center:public Player
{
public:
Center(const string &na):Player(na) {}
~Center()
{
cout << "In Center destructor " << endl;
}
void attack();
void defense();
};
class Guards:public Player
{
public:
Guards(const string &na):Player(na) {}
~Guards()
{
cout << "In Guards destructor " << endl;
}
void attack();
void defense();
};
class ForeignCenter
{
public:
ForeignCenter(const string &na):name(na)
{
cout << "............" << endl;
}
ForeignCenter()
{
cout << "-------------" << endl;
}
~ForeignCenter()
{
cout << "In ForeignCenter destructor " << endl;
}
void jingong();
void fangshou();
private:
string name;
};
class Translator: public Player
{
public:
Translator(const string &na):Player(na), chinese(na)
{
cout << "|||||||||||||||||||||||||||" << endl;
}
~Translator()
{
cout << "In Translator destructor " << endl;
}
void attack();
void defense();
private:
ForeignCenter chinese;
};
#endif
//adaptor.cpp
#include "adaptor.h"
void Forwards::attack()
{
cout << name << " 前锋进攻!" << endl;
}
void Forwards::defense()
{
cout << name << " 前锋防守!" << endl;
}
void Center::attack()
{
cout << name << " 中锋进攻!" << endl;
}
void Center::defense()
{
cout << name << " 中锋防守!" << endl;
}
void Guards::attack()
{
cout << name << " 后卫进攻!" << endl;
}
void Guards::defense()
{
cout << name << " 后卫防守!" << endl;
}
void ForeignCenter::jingong()
{
cout << "外籍中锋 " << name << " 进攻!" << endl;
}
void ForeignCenter::fangshou()
{
cout << "外籍中锋 " << name << " 防守!" << endl;
}
void Translator::attack()
{
chinese.jingong();
}
void Translator::defense()
{
chinese.fangshou();
}
//adaptorMain.cpp
#include "adaptor.h"
int main()
{
Player *b = new Forwards(string("巴蒂尔"));
b->attack();
delete b;
b = NULL;
Player *m = new Guards(string("麦克格雷迪"));
m->attack();
delete m;
m = NULL;
Player *ym = new Translator(string("姚明"));
ym->attack();
ym->defense();
delete ym;
ym = NULL;
return 0;
}
输出结果:
巴蒂尔 前锋进攻!
In Forwards destructor
In base destructor
麦克格雷迪 后卫进攻!
In Guards destructor
In base destructor
............
|||||||||||||||||||||||||||
外籍中锋 姚明 进攻!
外籍中锋 姚明 防守!
In Translator destructor
In ForeignCenter destructor
In base destructor