码迷,mamicode.com
首页 > 其他好文 > 详细

【设计模式】适配器模式

时间:2014-07-26 00:41:46      阅读:198      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   color   使用   strong   2014   re   

 

1、简单说明 

适配器模式
将一个类的接口 转换成 客户所希望的 另外一个接口。 Adapter模式使得原本由于
接口不兼容而不能一起工作的可以一起工作。


人物:客户, 接口A, 接口B

客户:小A啊,你这接口我用不了啊,你看我这把老骨头,也不能让我去适应你啊是不是,
呵呵,你应该向小B学习一下呀,他的接口就蛮不错的嘛~


接口A:老板呀,您是这个意思啊,好的呀,我最近练功的时候无意中获得一个宝贝,
这个宝贝可以变形,看我编程小B那样的接口伺候您老哈~


接口B:....

画外音:小A默默到了悬崖半山腰的山洞里,看了看四下无人,然后拿出Adapter这个宝贝
自言自语的说...


小A:魔镜墨镜,到底... 啊 错了错了。。 应该是:万能的Adapter,快点把我变成小
B那样的接口,变 变 变!!!


只见天空光芒四射,一个Adapter变出了一另外一个小A,可不同的是小A的接口看起来
像是小B那样的了,可是只是接口变成了小B的,可是小A的功能还是自己的。
小A见大功告成,然后开开心心的回去见客户了。

小A:客户,哈哈 快看我!


客户: 哇塞,小A 你太牛了,现在让我来用用你!


三炷香的时间之后...
客户:啊,不错 不错, 小A, 我很满意啊!!! 和小B用起来一样舒服 哈哈!


小A: 谢谢哈 么么哒~


小B:沉默...(管我鸟事...)

 

 

2、代码为例

//【小B】
class CClassB  
{
public:
    CClassB();
    virtual ~CClassB();
    virtual void Show(); //小B的接口
};

CClassB::CClassB(){}
CClassB::~CClassB(){}
void CClassB::Show()
{
    cout << endl << "我是小B, 这是我干的,我为自己代言!" << endl;
}


//【小A】
class CClassA
{
public:
    CClassA();
    virtual ~CClassA();
    int Func(int a);    //小A的接口
};

CClassA::CClassA(){}
CClassA::~CClassA(){}
int CClassA::Func(int a)
{
    cout << endl <<"我是小A吆," << "我的值是 " << a << ", 我为该起捏方便面事件负责吆!" << endl;
    return 0;
}



//【另一个小A】,相当于Adapter
//小A的神器 用小B 的样子变出了另一个小A
class CAnotherA : public CClassB
{
public:
    CAnotherA(int nVal, CClassA* ptrA);
    virtual ~CAnotherA();
    virtual void Show();   //【另一个小A】的和小B一样的接口
protected:
    CClassA* m_ptrA;       //原来小A的一个实例
    int m_nValue;
};
CAnotherA::CAnotherA(int nVal, CClassA* ptrA) : m_nValue(nVal), m_ptrA(ptrA){}
CAnotherA::~CAnotherA(){if(NULL != m_ptrA) delete m_ptrA; m_ptrA = NULL;}
void CAnotherA::Show()
{
    if(NULL == m_ptrA)
        return;

    m_ptrA->Func(m_nValue);  //小A中原有的接口
}

 

 

 

客户端

int _tmain(int argc, _TCHAR* argv[])
{
    //小B
    CClassB* pB = new CClassB();
    //小B的接口
    pB->Show();

    cout << endl;

    delete pB; pB = NULL;

    //另一个小A登场,CAnotherA是经过包装过的小A
    pB = new CAnotherA(10, new CClassA());
    pB->Show();

    cout << endl << endl;

    return 0;
}

 

 

 

 

3、执行结果

bubuko.com,布布扣

 

适配器把小A变成了类似小B的【另一个小A】,提供给客户使用。

这样小A形式的接口就可以被客户使用了。

 

 

 

【设计模式】适配器模式,布布扣,bubuko.com

【设计模式】适配器模式

标签:style   blog   http   color   使用   strong   2014   re   

原文地址:http://www.cnblogs.com/cuish/p/3868552.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!