标签: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、执行结果
适配器把小A变成了类似小B的【另一个小A】,提供给客户使用。
这样小A形式的接口就可以被客户使用了。
标签:style blog http color 使用 strong 2014 re
原文地址:http://www.cnblogs.com/cuish/p/3868552.html