在CnComm多线程串口通讯类的封装实现一文中实现了对于cncomm多线程串口类的简单封装,新版本将串口管理类改成了工厂类和单例类,实现了对于动态扩展新的串口,新的版本符合开闭原则。
1.串口管理类
#ifndef _COMM_MANAGE_H_
#define _COMM_MANAGE_H_
class CommWrapper;
//抽象基类
class CommAbsFactory
{
public:
virtual ~CommAbsFactory();
virtual CommWrapper* createCommWrapperInstance()=0;
protected:
CommAbsFactory();
};
//串口管理工厂具体类
class CommModuleFactory:public CommAbsFactory
{
public:
static CommModuleFactory* Instance();
virtual ~CommModuleFactory();
CommWrapper* createCommWrapperInstance();
protected:
CommModuleFactory();
CommModuleFactory(const CommModuleFactory&);
CommModuleFactory& operator= (const CommModuleFactory&);
private:
static CommModuleFactory* _commMangeinstance;
};
#endif
#include "stdafx.h"
#include "commWrapper.h"
#include "CommManage.h"
CommAbsFactory::CommAbsFactory()
{
}
CommAbsFactory::~CommAbsFactory()
{
}
CommModuleFactory* CommModuleFactory::_commMangeinstance = 0;
CommModuleFactory::CommModuleFactory()
{
}
CommModuleFactory::~CommModuleFactory()
{
}
CommModuleFactory* CommModuleFactory::Instance()
{
if(_commMangeinstance == 0)
{
_commMangeinstance = new CommModuleFactory();
}
return _commMangeinstance;
}
CommWrapper* CommModuleFactory::createCommWrapperInstance()
{
return new CommWrapper();
}