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;
    }

}

运行结果如下:
这里写图片描述

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