EEPROM燃烧器的设计模式
Design Pattern for an EEPROM burner
我已经为我的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++中实现它的常用方法是维护抽象工厂的静态注册表。通过明智地使用一些模板和静态初始化器,您可以将整个批次包装成每种混凝土产品中包含的几行锅炉板(例如芯片类型)。
静态初始化程序的使用允许将具体产品与注册表和想要创建产品的代码完全解耦,并有可能将每个产品实现为插件。
您可以有一个单独的工厂管理器来保存字符串->工厂对象的映射。然后,每个工厂类都将有一个全局实例,该实例在启动时向管理器注册自己。
我通常会尽量避免全局,尤其是单值,但任何其他方法都需要某种形式的显式列表,而您正试图避免这种列表。你必须小心时间问题(你不能真的假设各种工厂的创建顺序)。
- 派生类是否可以在抽象工厂设计模式中具有数据成员
- 资源管理设计模式
- 用于在回调中调用解析器的设计模式
- 设计帮助 - 为不同类型的消息处理通用接口的设计模式
- 在这种情况下我应该使用哪种设计模式
- C++中物体改变识别的设计模式?
- 确保所有构造函数调用相同的函数 c++ 设计模式
- 需要实例化不同类/对象并在启动时确定的硬件插槽的设计模式
- 设计模式,以避免不必要地添加抽象函数以适应新功能
- 工厂设计模式优化
- 使用C++模板的数据映射器设计模式
- 为什么以及如何使用原型设计模式
- 具有多个继承共享一个资源的对象 - 寻找良好的设计模式
- 在C++中创建观察器设计模式的好方法
- 现代C++在多大程度上消除了对设计模式的需求?
- 对于存储另一个类所需信息的类,例如其构造,是否有设计模式?
- 下面抽象工厂设计模式的实现是正确的吗
- sql记录集函数的状态设计模式
- 是否有可以处理方法调用依赖关系的设计模式?
- EEPROM燃烧器的设计模式