首页 > 代码库 > 【设计模式】适配器模式
【设计模式】适配器模式
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 的样子变出了另一个小Aclass 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形式的接口就可以被客户使用了。
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。