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

设计模式之美-结构型-适配器模式

设计模式之美(c++)-笔记-48-代理模式

设计模式之美(c++)-笔记-48-代理模式

设计模式之美(c++)-笔记-44-工厂模式

设计模式之美(c++)-笔记-46-建造者模式

设计模式之美(c++)-笔记-56-观察者模式