设计模式之美(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-适配器模式的主要内容,如果未能解决你的问题,请参考以下文章