cpp:Adapter Pattern
/*****************************************************************//** * \file GoldLogToFile.h * \brief 适配器模式Adapter Pattern 亦称: 封装器模式、Wrapper、Adapter C++ 14 * 2023年6月2日 涂聚文 Geovin Du Visual Studio 2022 edit. * \author geovindu * \date June 2023 *********************************************************************/ #pragma once #ifndef GOLDLOGTOFILE_H #define GOLDLOGTOFILE_H #include<cstring> #include<stdbool.h> #include<stdlib.h> #include<iostream> #include<malloc.h> #include<cmath> #include <iostream> #include <sstream> #include <vector> #include <algorithm> #include <array> #include <functional> #include <list> #include <string> #include <string.h> #include <vector> using namespace std; namespace DuJewelryAdapterPattern { /// <summary> /// /// </summary> class GoldLogToFile { public: /// <summary> /// 加载 /// </summary> void initFile() { cout << "日志文件初始化工作中" << endl; //做日志文件初始化工作,比如打开文件等等 //...... } /// <summary> /// 写 /// </summary> /// <param name="pcontent"></param> void writeToFile(const char* pcontent) { cout << "将日志内容写入文件" << endl; //将日志内容写入文件 //...... } /// <summary> /// 读 /// </summary> void readFromFile() { cout << "日志中读取一些信息" << endl; //从日志中读取一些信息 //...... } /// <summary> /// 关闭 /// </summary> void closeFile() { cout << "关闭日志文件" << endl; //关闭日志文件 //...... } //......可能还有很多其他成员函数,略 }; } #endif /*****************************************************************//** * \file GoldLogToDatabase.h * \brief 适配器模式Adapter Pattern 亦称: 封装器模式、Wrapper、Adapter C++ 14 * 2023年6月2日 涂聚文 Geovin Du Visual Studio 2022 edit. * \author geovindu * \date June 2023 *********************************************************************/ #pragma once #ifndef GOLDLOGTODATABASE_H #define GOLDLOGTODATABASE_H #include<cstring> #include<stdbool.h> #include<stdlib.h> #include<iostream> #include<malloc.h> #include<cmath> #include <iostream> #include <sstream> #include <vector> #include <algorithm> #include <array> #include <functional> #include <list> #include <string> #include <string.h> #include <vector> using namespace std; namespace DuJewelryAdapterPattern { /// <summary> /// /// </summary> class GoldLogToDatabase { public: /// <summary> /// 加载 /// </summary> virtual void initDb() = 0; //不一定非是纯虚函数 /// <summary> /// 写 /// </summary> /// <param name="pcontent"></param> virtual void writeToDb(const char* pcontent) = 0; /// <summary> /// 读 /// </summary> virtual void readFromDb() = 0; /// <summary> /// 关闭 /// </summary> virtual void closeDb() = 0; /// <summary> /// 做父类时析构函数应该为虚函数 /// </summary> virtual ~GoldLogToDatabase() {} }; } #endif /*****************************************************************//** * \file GoldLogAdapter.h * \brief 适配器模式Adapter Pattern 亦称: 封装器模式、Wrapper、Adapter C++ 14 * 2023年6月2日 涂聚文 Geovin Du Visual Studio 2022 edit. * \author geovindu * \date June 2023 *********************************************************************/ #pragma once #ifndef GOLDLOGADAPTER_H #define GOLDLOGADAPTER_H #include<cstring> #include<stdbool.h> #include<stdlib.h> #include<iostream> #include<malloc.h> #include<cmath> #include <iostream> #include <sstream> #include <vector> #include <algorithm> #include <array> #include <functional> #include <list> #include <string> #include <string.h> #include <vector> #include "GoldLogToDatabase.h" #include "GoldLogToFile.h" using namespace std; namespace DuJewelryAdapterPattern { /// <summary> /// 类适配器 /// </summary> class GoldLogAdapter:public GoldLogToDatabase, private GoldLogToFile { public: /// <summary> /// 加载 /// </summary> virtual void initDb() { cout << "在LogAdapter::initDb()中适配LogToFile::initFile()" << endl; //这其中也可以加任何的其他代码...... initFile(); } /// <summary> /// 写 /// </summary> /// <param name="pcontent"></param> virtual void writeToDb(const char* pcontent) { cout << "在LogAdapter::writeToDb()中适配LogToFile::writeToFile()" << endl; writeToFile(pcontent); } /// <summary> /// 读 /// </summary> virtual void readFromDb() { cout << "在LogAdapter::readFromFile()中适配LogToFile::readFromDb()" << endl; readFromFile(); } /// <summary> /// 关闭 /// </summary> virtual void closeDb() { cout << "在LogAdapter::closeDb()中适配LogToFile::closeDb()" << endl; closeFile(); } }; } #endif /*****************************************************************//** * \file DuLogToDatabase.h * \brief 适配器模式Adapter Pattern 亦称: 封装器模式、Wrapper、Adapter C++ 14 * 2023年6月2日 涂聚文 Geovin Du Visual Studio 2022 edit. * \author geovindu * \date June 2023 *********************************************************************/ #pragma once #ifndef DULOGTODATABASE_H #define DULOGTODATABASE_H #include<cstring> #include<stdbool.h> #include<stdlib.h> #include<iostream> #include<malloc.h> #include<cmath> #include <iostream> #include <sstream> #include <vector> #include <algorithm> #include <array> #include <functional> #include <list> #include <string> #include <string.h> #include <vector> using namespace std; namespace DuAdapterPattern { /// <summary> /// /// </summary> class DuLogToDatabase { public: /// <summary> /// 加载 /// </summary> void initDb() { cout << "连接数据库" << endl; //连接数据库,做一些基本的数据库连接设置等 //...... } /// <summary> /// 写 /// </summary> /// <param name="pcontent"></param> void writeToDb(const char* pcontent) { cout << "将日志内容写入数据库" << endl; //将日志内容写入数据库 //...... } /// <summary> /// 读 /// </summary> void readFromDb() { cout << "从数据库中读取一些日志信息" << endl; //从数据库中读取一些日志信息 //...... } /// <summary> /// 关闭 /// </summary> void closeDb() { cout << "关闭到数据库的连接" << endl; //关闭到数据库的连接 //...... } }; } #endif /*****************************************************************//** * \file DuLogAdapter.h * \brief 适配器模式Adapter Pattern 亦称: 封装器模式、Wrapper、Adapter C++ 14 * 2023年6月2日 涂聚文 Geovin Du Visual Studio 2022 edit. * \author geovindu * \date June 2023 *********************************************************************/ #pragma once #ifndef DULOGADAPTER_H #define DULOGADAPTER_H #include<cstring> #include<stdbool.h> #include<stdlib.h> #include<iostream> #include<malloc.h> #include<cmath> #include <iostream> #include <sstream> #include <vector> #include <algorithm> #include <array> #include <functional> #include <list> #include <string> #include <string.h> #include <vector> #include "DuLogToDatabase.h" #include "GoldLogToFile.h" using namespace std; using namespace DuJewelryAdapterPattern; namespace DuAdapterPattern { /// <summary> /// /// </summary> class DuLogAdapter:public DuLogToDatabase { public: /// <summary> /// 构造函数 /// </summary> /// <param name="pfile"></param> DuLogAdapter(GoldLogToFile* pfile) //形参是老接口所属类的指针 { mPFile = pfile; } /// <summary> /// /// </summary> virtual void initDb() { cout << "在DuLogAdapter::initDb()中适配GoldLogToFile::initFile()" << endl; //这其中也可以加任何的其他代码...... mPFile->initFile(); } /// <summary> /// /// </summary> /// <param name="pcontent"></param> virtual void writeToDb(const char* pcontent) { cout << "在DuLogAdapter::writeToDb()中适配GoldLogToFile::writeToFile()" << endl; mPFile->writeToFile(pcontent); } /// <summary> /// /// </summary> virtual void readFromDb() { cout << "在DuLogAdapter::readFromDb()中适配GoldLogToFile::readFromDb()" << endl; mPFile->readFromFile(); } /// <summary> /// /// </summary> virtual void closeDb() { cout << "在DuLogAdapter::closeDb()中适配GoldLogToFile::closedb()" << endl; mPFile->closeFile(); } private: GoldLogToFile* mPFile; }; } #endif /*****************************************************************//** * \file GeovinDu.h * \brief 适配器模式Adapter Pattern 亦称: 封装器模式、Wrapper、Adapter C++ 14 * 2023年6月2日 涂聚文 Geovin Du Visual Studio 2022 edit. * \author geovindu * \date June 2023 *********************************************************************/ #pragma once #ifndef GEOVINDU_H #define GEOVINDU_H #include<cstring> #include<stdbool.h> #include<stdlib.h> #include<iostream> #include<malloc.h> #include<cmath> #include <iostream> #include <sstream> #include <vector> #include <algorithm> #include <array> #include <functional> #include <list> #include <string> #include <string.h> #include "GoldLogToDatabase.h" #include "GoldLogToFile.h" #include "GoldLogAdapter.h" #include "DuLogToDatabase.h" #include "DuLogAdapter.h" using namespace std; using namespace DuAdapterPattern; namespace DuJewelryAdapterPattern { /// <summary> /// /// </summary> class GeovinDu { private: public: /// <summary> /// /// </summary> void displaySimple(); /// <summary> /// /// </summary> void displayDuSimple(); }; } #endif /*****************************************************************//** * \file GeovinDu.cpp * \brief 适配器模式Adapter Pattern 亦称: 封装器模式、Wrapper、Adapter C++ 14 * 2023年6月2日 涂聚文 Geovin Du Visual Studio 2022 edit. * \author geovindu * \date June 2023 *********************************************************************/ #include "GeovinDu.h" using namespace std; namespace DuJewelryAdapterPattern { /// <summary> /// /// </summary> void GeovinDu::displaySimple() { DuJewelryAdapterPattern::GoldLogToFile* plog = new DuJewelryAdapterPattern::GoldLogToFile(); plog->initFile(); plog->writeToFile("向日志文件中写入一条日志"); //写一条日志到日志文件中 plog->readFromFile(); plog->closeFile(); delete plog; } /// <summary> /// /// </summary> void GeovinDu::displayDuSimple() { DuAdapterPattern::DuLogToDatabase* plogdb = new DuAdapterPattern::DuLogToDatabase(); plogdb->initDb(); plogdb->writeToDb("向数据库中写入一条日志"); //写一条日志到数据库中 plogdb->closeDb(); plogdb->readFromDb(); DuJewelryAdapterPattern::GoldLogToFile* plog2 = new DuJewelryAdapterPattern::GoldLogToFile(); DuAdapterPattern::DuLogToDatabase* plogdb2 = new DuAdapterPattern::DuLogAdapter(plog2); // plogdb2->initDb(); plogdb2->writeToDb("向数据库中写入一条日志,实际是向日志文件中写入一条日志"); plogdb2->readFromDb(); plogdb2->closeDb(); delete plogdb; //delete plogdb2; delete plog2; } }
调用:
/*****************************************************************//** * \file ConsoleDuAdapterPattern.cpp * \brief 适配器模式Adapter Pattern 亦称: 封装器模式、Wrapper、Adapter C++ 14 * 2023年6月2日 涂聚文 Geovin Du Visual Studio 2022 edit. * \author geovindu * \date June 2023 *********************************************************************/ // ConsoleDuAdapterPattern.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。 // #define _UNICODE #include <iostream> #include "GeovinDu.h" #ifdef _DEBUG //只在Debug(调试)模式下 #ifndef DEBUG_NEW #define DEBUG_NEW new(_NORMAL_BLOCK,__FILE__,__LINE__) //重新定义new运算符 #define new DEBUG_NEW #endif #endif //#include <boost/type_index.hpp> using namespace std; //#pragma warning(disable : 4996) using namespace DuJewelryAdapterPattern; int main() { std::cout << "Hello World!涂聚文 Geovin Du\n"; GeovinDu geovin; geovin.displaySimple(); cout << "*****" << endl; geovin.displayDuSimple(); system("pause"); return 0; } // 运行程序: Ctrl + F5 或调试 >“开始执行(不调试)”菜单 // 调试程序: F5 或调试 >“开始调试”菜单 // 入门使用技巧: // 1. 使用解决方案资源管理器窗口添加/管理文件 // 2. 使用团队资源管理器窗口连接到源代码管理 // 3. 使用输出窗口查看生成输出和其他消息 // 4. 使用错误列表窗口查看错误 // 5. 转到“项目”>“添加新项”以创建新的代码文件,或转到“项目”>“添加现有项”以将现有代码文件添加到项目 // 6. 将来,若要再次打开此项目,请转到“文件”>“打开”>“项目”并选择 .sln 文件 #define UNICODE
输出:
Hello World!涂聚文 Geovin Du 日志文件初始化工作中 将日志内容写入文件 日志中读取一些信息 关闭日志文件 ***** 连接数据库 将日志内容写入数据库 关闭到数据库的连接 从数据库中读取一些日志信息 连接数据库 将日志内容写入数据库 从数据库中读取一些日志信息 关闭到数据库的连接 请按任意键继续. . .
哲学管理(学)人生, 文学艺术生活, 自动(计算机学)物理(学)工作, 生物(学)化学逆境, 历史(学)测绘(学)时间, 经济(学)数学金钱(理财), 心理(学)医学情绪, 诗词美容情感, 美学建筑(学)家园, 解构建构(分析)整合学习, 智商情商(IQ、EQ)运筹(学)生存.---Geovin Du(涂聚文)