C++设计模式-适配器(Adapter)

目录

C++设计模式-适配器(Adapter)

一、意图

二、适用性

三、结构

四、参与者

五、代码


C++设计模式-适配器(Adapter)

一、意图

将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。

二、适用性

  • 你想使用一个已经存在的类,而它的接口不符合你的需求。
  • 你想创建一个可以复用的类,该类可以与其他不相关的类或不可预见的类(即那些接口可能不一定兼容的类)协同工作。
  • (仅适用于对象Adapter)你想使用一些已经存在的子类,但是不可能对每一个都进行子类化以匹配它们的接口。对象适配器可以适配它的父类接口。

三、结构

类适配器使用多重继承对一个接口与另一个接口进行匹配。

对象匹配器依赖于对象组合。

四、参与者

  • Target

定义Client使用的与特定领域相关的接口。

  • Client

与符合Target接口的对象协同。

  • Adaptee

定义一个已经存在的接口,这个接口需要适配。

  • Adapter

对Adaptee的接口与Target接口进行适配。

五、代码

cpp 复制代码
#include<iostream>
using namespace std;

class Target {
public:
	virtual void Request() {
		cout << "Target::Request" << endl;
	}
};

class Adaptee {
public:
	void SpecificRequest() {
		cout << "Adaptee::SpecificRequest" << endl;
	}
};

//Adapter Class
class AdapterClass :public Target, private Adaptee {
public:
	virtual void Request() {
		cout << "AdapterClass::Request" << endl;
		this->SpecificRequest();
	}
};

//Adapter Object
class AdapterObject :public Target {
public:
	AdapterObject(Adaptee* TempAdaptee) {
		this->adaptee = TempAdaptee;
	}
	virtual void Request() {
		cout << "AdapterObject::Request" << endl;
		adaptee->SpecificRequest();
	}
private:
	Adaptee* adaptee;
};

int main() {
	//Adapter Class
	AdapterClass* adapterClass = new AdapterClass;
	adapterClass->Request();

	//Adapter Object
	Adaptee* adaptee = new Adaptee;
	AdapterObject* adapterObject = new AdapterObject(adaptee);
	adapterObject->Request();

	return 0;
}
相关推荐
资深web全栈开发5 小时前
设计模式之观察者模式 (Observer Pattern)
观察者模式·设计模式
m0_531237175 小时前
C语言-分支与循环语句练习2
c语言·开发语言·算法
懒惰成性的6 小时前
Java方法的使用
java·开发语言
Once_day6 小时前
GCC编译(3)常见编译选项
c语言·c++·编译和链接
蚊子码农6 小时前
算法题解记录-2452距离字典两次编辑以内的单词
开发语言·算法·c#
wangbing11256 小时前
Java构造函数不能加void
java·开发语言
Never_Satisfied6 小时前
在JavaScript / HTML中,数组查找第一个符合要求元素
开发语言·javascript·html
嵌入式×边缘AI:打怪升级日志6 小时前
9.2.1 分析 Write File Record 功能(保姆级讲解)
java·开发语言·网络
橙露6 小时前
Python 异步爬虫进阶:协程 + 代理池高效爬取实战
开发语言·爬虫·python
肆忆_7 小时前
Day 02|控制块分离架构:Boost 风格 shared_ptr 骨架落地
c++