将一个类的接口转换成客户希望的另外一个接口。
代码实现
一、对象适配器结构实现(基于组合)
class Target{//目标接口,client可以直接调用
public:
virtual void printName(){
};
};
class Adaptee{//已经存在的接口,此接口需要适配
public:
std::string getName(){
return std::string("karl");
}
};
class Adapter : public Target{//适配器,对Adaptee接口与Target接口进行适配
public:
Adapter(Adaptee *adap){
adaptee = adap;
}
void printName () override {
std::cout<<adaptee->getName()<<std::endl;
}
private:
Adaptee *adaptee;
};
int main(){//client,用户只能调用Target相关接口
Adaptee *a;
Target *target =new Adapter(a);
target->printName();
};
二、类适配器结构实现(基于继承)
class Target{//目标接口,client可以直接调用
public:
virtual void printName(){
};
};
class Adaptee{//已经存在的接口,此接口需要适配
public:
std::string getName(){
return std::string("karl");
}
};
class Adapter : public Target, private Adaptee{//对Adaptee接口与Target接口进行适配,私有继承了Adaptee来实现适配
public:
void printName () override {
std::cout<<this->getName()<<std::endl;
}
};
int main(){//client
Target *target = new Adapter();
target->printName();
};
适用性
- 使用一个已经存在的类(Adaptee),但是它的接口不符合要求。
- 创建一个可以复用的类,该类可以与其他不相关的类或者不可预见的类协同工作。
- 使用一些已经存在的子类,但是不可能对每一个都进行子类化以匹配它们的接口,对象适配器可以适配它的父类接口。
效果
比较多的会使用对象适配器
参考
- 《设计模式:可复用面向对象软件的基础》
- https://www.cnblogs.com/lwbqqyumidi/p/3750128.html
网友评论