栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C++设计模式之Adapter适配器模式

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C++设计模式之Adapter适配器模式

1.定义Adapter适配者类和目标抽象类 1.1. Adapter适配者类
class FilterAdapter_A
{
public:
	FilterAdapter_A()
	{
		std::cout << "FilterAdapter_A 构造函数" << std::endl;
		m_sType = "FilterAdapter_A";
	}

	~FilterAdapter_A()
	{
		std::cout << "FilterAdapter_A 析构函数" << std::endl;
	}

	void adapterFilter(const char* text)
	{
		std::cout << "过滤器为:" << m_sType << std::endl;
		std::cout << "过滤内容为:" << text << std::endl;
	}

private:
	std::string m_sType;
};

//
class FilterAdapter_B
{
public:
	FilterAdapter_B()
	{
		std::cout << "FilterAdapter_B 构造函数" << std::endl;
		m_sType = "FilterAdapter_B";
	}

	~FilterAdapter_B()
	{
		std::cout << "FilterAdapter_B 析构函数" << std::endl;
	}

	void adapterFilter(const char* text,const std::string& mask)
	{
		std::cout << "过滤器为:" << m_sType << std::endl;
		std::cout << "过滤内容为:" << text << std::endl;
		std::cout << "过滤mask为:" << mask << std::endl;
	}

private:
	std::string m_sType;
};
1.2.目标抽象类
class FilterTarget
{
public:
	virtual ~FilterTarget() = default;
	virtual void filter(const std::string& text) = 0;

protected:
	FilterTarget() = default;
};
2. 适配器模式:类适配器
///第一种适配器模式:类适配器///
class Class_FilterAdapter_A : public FilterTarget,private FilterAdapter_A
{
public:
	Class_FilterAdapter_A()
	{
		std::cout << "Class_FilterAdapter_A 构造函数" << std::endl;
	}
	~Class_FilterAdapter_A()
	{
		std::cout << "Class_FilterAdapter_A 构造函数" << std::endl;
	}

	void filter(const std::string& text) override
	{
		const char* temp = text.c_str();
		adapterFilter(temp);
	}
private:

};

class Class_FilterAdapter_B : public FilterTarget, private FilterAdapter_B
{
public:
	Class_FilterAdapter_B()
	{
		std::cout << "Class_FilterAdapter_B 构造函数" << std::endl;
		m_sMask = "MASK_B";
	}
	~Class_FilterAdapter_B()
	{
		std::cout << "Class_FilterAdapter_B 构造函数" << std::endl;
	}

	void filter(const std::string& text) override
	{
		const char* temp = text.c_str();
		adapterFilter(temp, m_sMask);
	}
private:
	std::string m_sMask;
};
3.适配器模式:对象适配器
/第二种适配器模式:对象适配器///
class Object_FilterAdapter_A : public FilterTarget
{
public:
	Object_FilterAdapter_A()
	{
		std::cout << "Object_FilterAdapter_A 构造函数" << std::endl;
	}

	~Object_FilterAdapter_A()
	{
		std::cout << "Object_FilterAdapter_A 构造函数" << std::endl;
	}

	void filter(const std::string& text) override
	{
		const char* temp = text.c_str();
		m_FilterAdapterA.adapterFilter(temp);//委托
	}

private:
	FilterAdapter_A m_FilterAdapterA;
};

class Object_FilterAdapter_B : public FilterTarget
{
public:
	Object_FilterAdapter_B()
	{
		std::cout << "Object_FilterAdapter_B 构造函数" << std::endl;
		m_sMask = "MASK_B";
	}

	~Object_FilterAdapter_B()
	{
		std::cout << "Object_FilterAdapter_B 构造函数" << std::endl;
	}

	void filter(const std::string& text) override
	{
		const char* temp = text.c_str();
		m_FilterAdapterB.adapterFilter(temp, m_sMask);//委托
	}

private:
	FilterAdapter_B m_FilterAdapterB;
	std::string m_sMask;
};
4. 主函数
#include 
#include 
#include   
using namespace std;

void main()
{
	//类适配器模式
	{
		std::list filterList;
		filterList.push_back(new Class_FilterAdapter_A());
		filterList.push_back(new Class_FilterAdapter_B());

		std::list::iterator iter = filterList.begin();
		while (iter != filterList.end())
		{
			FilterTarget* filter = *iter++;
			filter->filter("这是类适配器模式");
		}

		while (!filterList.empty())
		{
			FilterTarget* filter = filterList.front();
			filterList.pop_front();
			delete filter;
		}
	}



	for (size_t i = 0; i < 3; i++)
	{
		std::cout << std::endl;
	}


	//对象适配器模式
	{
		std::list filterList;
		filterList.push_back(new Object_FilterAdapter_A());
		filterList.push_back(new Object_FilterAdapter_B());

		std::list::iterator iter = filterList.begin();
		while (iter != filterList.end())
		{
			FilterTarget* filter = *iter++;
			filter->filter("这是对象适配器模式");
		}

		while (!filterList.empty())
		{
			FilterTarget* filter = filterList.front();
			filterList.pop_front();
			delete filter;
		}
	}

	system("pause");
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/303361.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号