適配器模式將一個類的接口轉換成客戶希望的另外一個接口。Adapter模式使得原本由於接口不兼容而不能一起工作的那些類可以一起工作。在使用一個已經存在的類時,如果它的接口,也就是方法和你的要求不同時,就應該考慮用適配器模式。
下面是適配器的結構圖:
代碼如下:
class Player
{
protected:
string m_strName;
public:
Player(string& __n)
{
m_strName = __n;
}
virtual ~Player() {}
virtual void Attack() {}
virtual void Defense() {}
};
class Forwards: public Player
{
public:
Forwards(string& __n) : Player(__n)
{
}
~Forwards()
{
}
virtual void Attack()
{
printf("Forwards %s Attack\n", m_strName.c_str());
}
virtual void Defense()
{
printf("Forwards %s Defense\n", m_strName.c_str());
}
};
class Guards : public Player
{
public:
Guards(string& __n) : Player(__n)
{
}
~Guards()
{
}
virtual void Attack()
{
printf("Guards %s Attack\n", m_strName.c_str());
}
virtual void Defense()
{
printf("Guards %s Defense\n", m_strName.c_str());
}
};
class Translator : public Player
{
public:
Translator(string& __n) : Player(__n) {}
~Translator() {}
virtual void Attack()
{
center.Attack();
}
virtual void Defense()
{
center.Defense();
}
private:
ForeignCenter center;
};
int _tmain(int _tmain(int argc, TCHAR* argv[]))
{
string name = "Batier";
Player *pForward = new Forwards(name);
pForward->Attack();
name = "MaiDi";
Player *pGuard = new Guards(name);
pGuard->Attack();
name = "YaoMing";
Player *pCenter = new Translator(name);
pCenter->Attack();
pCenter->Defense();
if (pForward)
{
delete pForward;
pForward = NULL;
}
if (pGuard)
{
delete pGuard;
pGuard = NULL;
}
if (pCenter)
{
delete pCenter;
pCenter = NULL;
}
}
運行結果如下: