EEPROM燃烧器的设计模式

Design Pattern for an EEPROM burner

本文关键字:设计模式 燃烧器 EEPROM      更新时间:2023-10-16

我已经为我的PC桥使用Teensy++2.0为自己构建了一个基本的EEPROM刻录机,它运行得很好,但随着我希望扩展它的兼容性,我的代码变得相当粗糙。我正在寻找一些建议,以便进行适当的设计,使此代码具有可扩展性。我上过软件设计模式的课,但那是一段时间前的事了,现在我还处于空白状态。基本上,这是一个用例:

我有几种方法,如ReadByte()、WriteByte(。棘手的部分是确定要生成哪种芯片类型的对象。我目前在Teensy++串行输入上使用伪终端前端,这是一个带有参数的基本命令行类型接口,可以将芯片类型等选项发送到Teensy++。问题是,是否有一种设计模式(在C/C++中),类似于工厂模式,它会接受芯片类型的字符串输入(因为这是我从用户那里得到的),并返回正确派生类型的EEPROM对象,而不必手动创建一些大的switch语句或类似的丑陋语句,在创建新的芯片派生类时,我必须将新芯片添加到列表中?所以类似于:

公共常数EEPROM&GetEEPROM(const std::string&id)

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

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

您想要的是一个可插拔工厂。这里有一个很好的描述。它被认为是约翰·瓦利塞德斯(四人帮成员之一)的作品,并将抽象工厂模式向前推进了几步。这个模式恰好也是COM.的体系结构基础

在C++中实现它的常用方法是维护抽象工厂的静态注册表。通过明智地使用一些模板和静态初始化器,您可以将整个批次包装成每种混凝土产品中包含的几行锅炉板(例如芯片类型)。

静态初始化程序的使用允许将具体产品与注册表和想要创建产品的代码完全解耦,并有可能将每个产品实现为插件。

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

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