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;
}
相关推荐
朝新_3 小时前
【多线程初阶】阻塞队列 & 生产者消费者模型
java·开发语言·javaee
立莹Sir3 小时前
Calendar类日期设置进位问题
java·开发语言
木子.李3474 小时前
排序算法总结(C++)
c++·算法·排序算法
风逸hhh4 小时前
python打卡day46@浙大疏锦行
开发语言·python
火兮明兮4 小时前
Python训练第四十三天
开发语言·python
季鸢4 小时前
Java设计模式之状态模式详解
java·设计模式·状态模式
freyazzr5 小时前
C++八股 | Day2 | atom/函数指针/指针函数/struct、Class/静态局部变量、局部变量、全局变量/强制类型转换
c++
ascarl20105 小时前
准确--k8s cgroup问题排查
java·开发语言
fpcc6 小时前
跟我学c++中级篇——理解类型推导和C++不同版本的支持
开发语言·c++
莱茵菜苗6 小时前
Python打卡训练营day46——2025.06.06
开发语言·python