设计模式之美(c++)-笔记-51-适配器模式
Posted 欢乐的企鹅
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了设计模式之美(c++)-笔记-51-适配器模式相关的知识,希望对你有一定的参考价值。
适配器模式是用来做适配,它将不兼容的接口转换为可兼容的接口,让原本由于接口不兼容而不能一起工作的类可以一起工作。适配器模式有两种实现方式:类适配器和对象适配器。其中,类适配器使用继承关系来实现,对象适配器使用组合关系来实现。
一般来说,适配器模式可以看作一种“补偿模式”,用来补救设计上的缺陷。应用这种模式算是“无奈之举”,如果在设计初期,我们就能协调规避接口不兼容的问题,那这种模式就没有应用的机会了。
那在实际的开发中,什么情况下才会出现接口不兼容呢?我总结下了下面这样 5 种场景:
封装有缺陷的接口设计
统一多个类的接口设计
替换依赖的外部系统
兼容老版本接口
适配不同格式的数据
struct ITarget {
virtual void f1() = 0;
virtual void f2() = 0;
virtual void fc() = 0;
virtual ~ITarget() {}
};
class Adaptee {
public:
void fa() { /* implementaion */ }
void fb() { /* implementaion */ }
void fc() { /* implementaion */ }
};
//基于继承的类适配器
class Adaptor : public Adaptee, public ITarget {
public:
void f1() override {
fa();
}
void f2() {
//...重新实现f2()...
}
void fc() { Adaptee::fc();}
// 这里fc()直接调用直接继承自Adaptee的fc(),这是跟对象适配器最大的不同点
};
//基于组合的对象适配器
class Adaptor2 : public ITarget {
public:
Adaptor2(Adaptee* adaptee) {
this->adaptee = adaptee;
}
void f1() {
adaptee->fa(); //委托给Adaptee
}
void f2() {
//...重新实现f2()...
}
void fc() {
adaptee->fc();
}
private:
Adaptee* adaptee;
};
int main()
{
Adaptor a1;
a1.fc();
return 0;
}
以上是关于设计模式之美(c++)-笔记-51-适配器模式的主要内容,如果未能解决你的问题,请参考以下文章