使用Delphi 2010,我需要编写一个程序来支持模块或插件。虽然有点做作,但假设我有一个转换数据文件/文本文件的应用程序。它将支持30种输入格式和30种格式作为输出。第一个版本可能只实现其中的一些格式。我的挑战是我想要一个数据驱动的流程。
例如,假设我有一个PARSE_FILE例程。如果我的输入数据文件格式是'Format_A',那么当我调用PARSE_FILE时,它应该知道使用PARSE_FILE_Format_A,而不是PARSE_FILE例程的其他29个不同版本。
PARSE_FILE只是一个例子。我可能会有60个不同的常用函数,LOAD_FILE,GET_DELIMITER,PARSE_FILE等,但这些函数中的每一个对于30种不同格式中的每一种都会有所不同。我可以使用什么技术,以便在我使用FORMAT_A加载文件时,这60个不同的常用例程中的每一个都使用这60个例程的正确“版本”?
请记住,我只是从5种输入格式开始,稍后会添加其他格式,因此我需要一种集中定义此“映射”的方式,因此无论在何处使用这些例程我的代码,即使我调用泛型版本,也会使用正确的例程版本。
答案 0 :(得分:5)
IFileFormatHandler
,
其中包含PARSE_FILE函数等IFileFormatHandler
接口类型放在一个BPL包(即Common.bpl)中,以便所有模块都可以引用通用接口类型。每个插件模块本身也都在自己的BPL包中。 (多个文件格式处理程序可以存在于同一个BPL程序包中,但基线示例是每个BPL一个)RegisterPlugin(name: string; instance: IFileFormatHandler)
。这会将插件名称和实例注册到内部列表中,主机应用程序可以使用该列表查找可用的插件并进行调用。