Design Pattern之適配器模式

適配器模式將一個類的接口轉換成客戶希望的另外一個接口。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;
    }

}

運行結果如下:
這裏寫圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章