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;
}
相关推荐
小王子10242 小时前
设计模式Python版 组合模式
python·设计模式·组合模式
我不是代码教父2 小时前
[原创](Modern C++)现代C++的关键性概念: 流格式化
c++·字符串格式化·流格式化·cout格式化
利刃大大2 小时前
【回溯+剪枝】找出所有子集的异或总和再求和 && 全排列Ⅱ
c++·算法·深度优先·剪枝
子燕若水3 小时前
mac 手工安装OpenSSL 3.4.0
c++
来恩10033 小时前
C# 类与对象详解
开发语言·c#
*TQK*3 小时前
ZZNUOJ(C/C++)基础练习1041——1050(详解版)
c语言·c++·编程知识点
komo莫莫da3 小时前
寒假刷题Day19
java·开发语言
ElseWhereR3 小时前
C++ 写一个简单的加减法计算器
开发语言·c++·算法
*TQK*4 小时前
ZZNUOJ(C/C++)基础练习1031——1040(详解版)
c语言·c++·编程知识点
linwq84 小时前
设计模式学习(二)
java·学习·设计模式