c++ - EEPROM 烧录器的设计模式

标签 c++ c design-patterns

我为自己的 PC 桥使用 Teensy++ 2.0 为自己构建了一个基本的 EEPROM 刻录机,它运行良好,但当我希望扩展其兼容性时,我的代码变得相当笨拙。我正在寻找一些建议,以进行适当的设计以使此代码可扩展。我上过软件设计模式的类(class),但那是不久前的事,现在我正在画一个空白。基本上,这是用例:

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

public const EEPROM & GetEEPROM(const std::string & id)

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

这段代码将在 AVR 微 Controller 上运行,所以我不能有任何具有巨大 OOP 开销的东西,但我使用的特定微 Controller 确实有相对大量的程序闪存和工作 RAM,所以它不是就像我尝试以 2kb 的速度运行一样,但我必须牢记有限的资源。

最佳答案

您正在寻找的是可插入工厂。有一个 good description这里。它归功于 John Vlissides(Gang of Four 之一),并使抽象工厂模式更进一步。这种模式恰好也是 COM 的架构基础。

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

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

关于c++ - EEPROM 烧录器的设计模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17581334/

相关文章:

c++ - Visual Studio 中的大括号逗号语法是什么?

c++ - Windows 上有用的开源库/项目

c - C 中的字体规范

c# - 如何从Windows系统中彻底删除文件

php - 构造函数注入(inject)与方法注入(inject)

c++ - 无法打开文件 libmfx_vs2015.lib

特定于 gcc 4.5 的 C++ 数组创建问题

c - c中结构的定义

java - 在 Java 中,我应该为常量属性使用 getter 还是接口(interface)标记?

c - C 库是否应该提供使用自定义内存分配器的能力?