适配器模式:将一个类的接口转换成客户期望的另一个接口,适配器让原本接口不兼容的类可以合作无间。
模式比较简单,直接贴代码:
#ifndef Duck_h
#define Duck_h
#include <iostream>
class Duck {
public:
virtual void quack()=0;
};
class MallardDuck:public Duck{
public:
void quack(){
printf("MallardDuck Quack\n");
}
};
#endif /* Duck_h */
#ifndef Turkey_h
#define Turkey_h
#include <iostream>
class Turkey{
public:
//火鸡不能呱呱叫,只能咯咯叫
void gobble(){
printf("Turkey Gobble\n");
}
};
#endif /* Turkey_h */
#ifndef TurkeyAdapter_h
#define TurkeyAdapter_h
#include "Duck.h"
#include "Turkey.h"
class TurkeyAdapter:public Duck{
private:
Turkey* turkey;
public:
TurkeyAdapter(Turkey* turkey){
this->turkey = turkey;
}
void quack(){
turkey->gobble();
}
};
#endif /* TurkeyAdapter_h */
#include <iostream>
#include "Duck.h"
#include "Turkey.h"
#include "TurkeyAdapter.h"
void testQuack(Duck* duck);
int main(int argc, const char * argv[]) {
auto duck = new MallardDuck();
auto turkey = new Turkey();
auto turkeyAdapter = new TurkeyAdapter(turkey);
testQuack(duck);
testQuack(turkeyAdapter);//使用适配器使火鸡兼容Duck*参数
return 0;
}
void testQuack(Duck* duck){//客户只接受Duck*类型
duck->quack();
}