结构型模式-适配器模式

适配器模式理论

将一个类的接口转换目标接口。使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。

适配器模式案例

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

//适配器模式 就是将已经写好的接口,但是这个接口不符合需求
//将写好的接口转换成目标接口

//这函数我已经写好
struct Myprint{
	void operator()(int v1,int v2) {
		cout << v1 + v2 << endl;
	}
};

//定义目标接口 我要是配偶 适配成什么样的,
//要适配成只能传一个参数的,适配for_each第三个参数的适用
class Target {
public:
	virtual void operator()(int v) = 0;

};

//写适配器
class Adapater :public Target {
public:
	Adapater(int param) {
		this->param = param;
	}
	virtual void operator() (int v) {
		print(v,param);
	}
public:
	Myprint print;
	int param;
};

//MyBind2nd,原来param固定的10,现在提供一个方法改
Adapater MyBind2nd(int v) {
	return Adapater(v);
}


int main(void) {
	vector<int> v;
	for (int i = 0; i < 10; i++) {
		v.push_back(i);
	}
	
	//适配器模式的运用
	//for_each()的第三个参数是个带一个参数的函数,但是Myprint需要两个参数
	for_each(v.begin(),v.end(), MyBind2nd(10));

	return 0;
}

适配器模式的优缺点

优点:

(1)将目标类和适配者类解耦,通过引入一个适配器类来重用现有的适配者类,无须修改原有结构。

(2)增加了类的透明性和复用性,将具体的业务实现过程封装在适配者类中,对于客户端类而言是透明的,而且提高了适配者的复用性,同一个适配者类可以在多个不同的系统中复用。

(3)灵活性和扩展性都非常好,可以很方便地更换适配器,也可以在不修改原有代码的基础上增加新的适配器类,完全符合"开闭原则"。

缺点:

适配器中置换适配者类的某些方法比较麻烦。

适配器模式的适用场景

(1) 系统需要使用一些现有的类,而这些类的接口(如方法名)不符合系统的需要,甚至没有这些类的源代码。

(2) 想创建一个可以重复使用的类,用于与一些彼此之间没有太大关联的一些类,包括一些可能在将来引进的类一起工作。

相关推荐
誰能久伴不乏7 小时前
桌面客户端的运行日志系统:SQLite 分块 + 独立写线程 + 文本降级
数据库·c++·qt·架构·sqlite
学长毕设14 小时前
基于SpringBoot的青少年编程学习平台系统-附源码
spring boot·学习·青少年编程
choumin16 小时前
C++中万能引用与std::forward的作用和用法
c++·万能引用·std forward
下一站春风里17 小时前
位运算完整学习笔记:按位与(&)+ 异或(^)
开发语言·c++·算法
小小de风呀18 小时前
de风——【从零开始学习Linux】(九):进程基础 —— 从冯诺依曼体系到 fork 创建进程
linux·学习
李某学编程18 小时前
基于ARM的微机原理学习笔记(一)
arm开发·笔记·学习
Song_RsHt19 小时前
Redis 与微服务,什么场景下无可替代
java·redis·后端·学习·微服务
sbjdhjd19 小时前
AI产业周度动态:从“更强模型”走向“可执行、可治理、可计价”的系统竞争 (2026年10月19日—10月25日)
人工智能·笔记·ai·开源·gemini·信息差·claude code
努力努力再努力wz20 小时前
【C++高阶系列】C++20 协程底层原理:函数为什么能暂停?从状态机到 Task,彻底串起挂起、恢复与协程调度
开发语言·c++·c++20·1024程序员节
划破黑暗的第一缕曙光20 小时前
[C++]:4.模板
c++·template·模板·函数模版·类模版