C++ EEPROM刻录机的设计模式

C++ EEPROM刻录机的设计模式,c++,c,design-patterns,C++,C,Design Patterns,我用Teensy++2.0为我的PC桥接器构建了一个基本的EEPROM烧录器,它工作得很好,但当我想扩展它的兼容性时,我的代码变得相当粗糙。我正在寻找一些建议,以使这段代码具有可扩展性。我参加了一门软件设计模式的课程,但那是很久以前的事了,我现在还没有完成。基本上,以下是用例: 我有几种方法,比如ReadByte()、WriteByte()、ProgramByte()(对于需要多字节写入序列才能编程的FlashROM)、橡皮擦芯片(),等等。因此,基本上我有一个EEPROM纯虚拟基类,它由我想要

我用Teensy++2.0为我的PC桥接器构建了一个基本的EEPROM烧录器,它工作得很好,但当我想扩展它的兼容性时,我的代码变得相当粗糙。我正在寻找一些建议,以使这段代码具有可扩展性。我参加了一门软件设计模式的课程,但那是很久以前的事了,我现在还没有完成。基本上,以下是用例:

我有几种方法,比如ReadByte()、WriteByte()、ProgramByte()(对于需要多字节写入序列才能编程的FlashROM)、橡皮擦芯片(),等等。因此,基本上我有一个EEPROM纯虚拟基类,它由我想要支持的每种芯片类型的具体类实现。棘手的部分是确定要生成哪种芯片类型的对象。我目前正在Teensy++串行输入上使用一个伪终端前端,这是一个带有参数的基本命令行类型接口,用于向Teensy++发送芯片类型等选项。问题是,是否有一种设计模式(在C/C++中),类似于工厂模式,它会接受芯片类型的字符串输入(因为这是我从用户那里得到的),并返回正确派生类型的EEPROM对象,不必手动创建一些大的switch语句或类似的丑陋语句,在创建新的芯片派生类时,我必须将新芯片添加到列表中?比如:

公用常量EEPROM和GetEEPROM(常量标准::字符串和id)

如果我给它传递字符串“am29f032b”,它将返回对am29f032b对象的引用,或者如果我给它传递字符串“sst39sf040”,它将返回对sst39sf040对象的引用,然后我可以调用上面提到的函数,它将适用于指定的芯片


这段代码将在AVR微控制器上运行,所以我不能有任何OOP开销很大的东西,但我使用的特定微控制器确实有相对大量的程序闪存和工作RAM,所以我不想在2kb中运行,但是我必须记住有限的资源。

您可以有一个保持字符串->工厂对象映射的单例工厂管理器。然后,每个工厂类将有一个全局实例,在启动时向管理器注册自己


我尽量避免使用全局变量,特别是单例变量,但任何其他方法都需要某种形式的显式列表,而您正试图避免这种形式。你必须小心时间问题(你不能真的假设各种工厂的创建顺序)。

你要找的是一个可插拔的工厂。这里有一个电话。它是由John Vlissides(第1个)提出的,并进一步采用了抽象工厂模式。这种模式恰好也是COM. <>通常在C++中实现一种方法是保持抽象工厂的静态注册表。通过明智地使用一些模板和静态初始化器,您可以将整个批次包装成几行锅炉板,包括在每个具体产品中(例如芯片类型)

静态初始化器的使用允许从注册表和想要创建产品的代码中完全分离具体产品,并且可以将每个具体产品作为插件实现