设计模式学习笔记-结构型模式-Adapter模式

适配器模式是一种设计模式,用于解决第三方库接口与已有系统接口不兼容的问题。通过类模式或对象模式,适配器使得原本不兼容的类能够协同工作。在示例中,展示了如何通过继承或组合方式实现接口转换,使得Target类能够调用Adaptee类的方法而不修改Adaptee的接口。适配器模式在软件工程中广泛应用,提供了一种灵活的解决方案来应对接口不一致带来的挑战。
摘要由CSDN通过智能技术生成

Adapter 模式解决的问题:
第三方的库提供的接口与我们在应用程序中已经设计好了的接口不一致。这些接口不兼容的类不能在一起工作

Adapter 模式提供了方法将一个类(第三方库)的接口转化为客户(购买使用者)希望的接口。

Adapter 模式的类模式
Adapter_Class.h

#pragma once

class Target_Class
{
public:
	Target_Class();
	~Target_Class();
	virtual void Request();
};

class Adaptee_Class//受改造的
{
public:
	Adaptee_Class();
	~Adaptee_Class();
	void SpecificRequest();
};

//通过 private 继承Adaptee 获得实现继承的效果,而通过 public 继承 Target 获得接口继承的效果
class Adapter_Class :public Target_Class, private Adaptee_Class
{
public:
	Adapter_Class();
	~Adapter_Class();
	void Request();
};

Adapter_Class.cpp

#include "Adapter_Class.h"

#include <iostream>
using namespace std;

Adapter_Class::Adapter_Class()
{
}


Adapter_Class::~Adapter_Class()
{
}

void Adapter_Class::Request()
{
	this->SpecificRequest();
}

Target_Class::Target_Class()
{
}

Target_Class::~Target_Class()
{
}

void Target_Class::Request()
{
	cout << "Target::Request" << std::endl;
}

Adaptee_Class::Adaptee_Class()
{
}

Adaptee_Class::~Adaptee_Class()
{
}

void Adaptee_Class::SpecificRequest()
{
	cout << "Adaptee::SpecificRequest" << std::endl;
}

Adapter 模式的对象模式
Adapter_Object.h

#pragma once

class Target_Object
{
public:
	Target_Object();
	~Target_Object();
	virtual void Request();
};

class Adaptee_Object
{
public:
	Adaptee_Object();
	~Adaptee_Object();
	void SpecificRequest();
};

class Adapter_Object:public Target_Object
{
public:
	Adapter_Object(Adaptee_Object *ade);
	~Adapter_Object();
	void Request();

private:
	Adaptee_Object* _ade;
};

Adapter_Object.cpp

#include "Adapter_Object.h"

#include <iostream>
using namespace std;


Adapter_Object::Adapter_Object(Adaptee_Object * ade)
{
	this->_ade = ade;
}

Adapter_Object::~Adapter_Object()
{
}

void Adapter_Object::Request()
{
	_ade->SpecificRequest();
}

Target_Object::Target_Object()
{
}

Target_Object::~Target_Object()
{
}

void Target_Object::Request()
{
	cout << "Target::Request" << std::endl;
}

Adaptee_Object::Adaptee_Object()
{
}

Adaptee_Object::~Adaptee_Object()
{
}

void Adaptee_Object::SpecificRequest()
{
	cout << "Adaptee::SpecificRequest" << std::endl;
}

main.cpp

#include <iostream>
using namespace std;

#include "Adapter_Class.h"
#include "Adapter_Object.h"

int main(int argc, char* argv[])
{
	//Adapter 模式的类模式 通过继承的方式
	Target_Class* adt_class = new Adapter_Class();
	adt_class->Request();

	//Adapter 模式的对象模式 通过组合的方式
	Adaptee_Object* ade_object = new Adaptee_Object();
	Target_Object* adt_object = new Adapter_Object(ade_object);
	adt_object->Request();
	
	system("pause");
	return 0;
}
Adaptee::SpecificRequest
Adaptee::SpecificRequest
请按任意键继续. . .

可以看到
通过Adapter模式可以方便的通过target类调用adaptee类的接口,而不用修改adaptee的接口。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值