1 Star 0 Fork 0

zypapa/FactoryMode

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
main3.cpp 1.80 KB
一键复制 编辑 原始数据 按行查看 历史
jichao 提交于 2021-12-13 16:18 . first commit
#include <QCoreApplication>
#include <QDebug>
// 通信设备接口类
class Device
{
public:
virtual void write() = 0;
virtual void read() = 0;
};
///
/// 具体的子类,网口通信类
///
class EthernetDevice : public Device
{
public:
EthernetDevice()
{
qDebug()<<"EthernetDevice construct";
}
virtual ~EthernetDevice()
{
qDebug()<<"EthernetDevice disconstruct";
}
virtual void write()
{
qDebug()<<"EthernetDevice write";
}
virtual void read()
{
qDebug()<<"EthernetDevice read";
}
};
///
/// 具体的子类,串口通信类
///
class UartDevice: public Device
{
public:
UartDevice()
{
qDebug()<<"uartDevice construct";
}
virtual ~UartDevice()
{
qDebug()<<"uartDevice disconstruct";
}
virtual void write()
{
qDebug()<<"uartDevice write";
}
virtual void read()
{
qDebug()<<"uartDevice read";
}
};
// 抽象模板工厂类
// 模板参数:AbstractDevice_t 设备抽象类
template <class AbstractDevice_t>
class AbstractFactory
{
public:
virtual AbstractDevice_t *createDevice() = 0;
virtual ~AbstractFactory() {}
};
// 具体模板工厂类
// 模板参数:AbstractDevice_t 设备抽象类,ConcreteDevice_t 设备具体类
template <class AbstractDevice_t, class ConcreteDevice_t>
class ConcreteFactory : public AbstractFactory<AbstractDevice_t>
{
public:
AbstractDevice_t *createDevice()
{
return new ConcreteDevice_t();
}
};
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
//ConcreteFactory<Device, EthernetDevice> factory;
ConcreteFactory<Device, UartDevice> factory;
Device* dev = factory.createDevice();
dev->write();
dev->read();
//。。。
return a.exec();
}
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
C++
1
https://gitee.com/zypapa100/factory-mode.git
git@gitee.com:zypapa100/factory-mode.git
zypapa100
factory-mode
FactoryMode
master

搜索帮助

23e8dbc6 1850385 7e0993f3 1850385