我需要构造两个对象,A
并且B
. 这些A
和B
对象可以以不同的方式初始化。
构建A
(工作)的设计模式:
A
有子类A_txt
, A_tsv
,A_csv
等。每个A
子类型都是从一个string
(文件路径)构造的,但每个子类型都以不同的方式加载文件。我已经建立了一个注册表,将文件类型(例如 txt
)映射到适当的工厂以创建该对象:
txt
--> A_txt_Factory
tsv
--> A_tsv_Factory
...
whereA_txt_factory
接收文件路径,将其作为文本文件加载,然后返回指向A_txt
对象的指针。
一起,我将此注册表用作工厂:给定文件路径和文件类型,它会查找与该标记对应的工厂,并使用它来构造并返回指向A
对象的指针。
我真的很喜欢这种组合注册表和工厂设计模式;其他人可以轻松地创建自己的文件类型和加载它的工厂,将其签入注册表并使用它而无需查看其他代码。
要构建的设计模式B
(我需要帮助):
构造B
对象更加困难,因为它们并非都从相同的类型加载(例如,所有A
子类型都使用string
指示文件路径的 a 构造)。B_text
将从文本文件(从提供的string
指示文件路径)加载,但与以前不同,B_intAndA
可能会从 int 和A
.
我可以使用什么设计模式来创建B
?和以前一样,我将有一个string
标签来指示将使用哪个工厂;然而,与以前不同的是,每个工厂将接受不同的参数(可能还有不同数量的参数)。我想这可以通过可变参数的可变模板函数以某种方式完成(我使用的是 C++11,所以这是一个选项)。
这种设计模式是否曾经出现在其他任何人身上(相同的基类,但构造了不同数量的不同类型的参数)?
制作构建不同子类型的单个工厂很容易B
,但很难知道如何允许它们使用注册表进行索引,因为它们接受不同类型和数量的参数。
你会怎么处理这个?