tl; dr:是否存在一种设计模式来加载XML文件并根据内容构造层次化的多态对象?
说(示例),我有一个从Container
派生的派生类Storage
,并带有项目列表。
以某种方式我必须加载XML文件,该文件具有:
-有关存储的一些常规信息(名称,位置)。
-我需要一个Container实现(例如:不是Cabinet或Shelfs)。
-带有相关信息的项目。
当前,我在main中打开一个QXmlStreamReader,查看我需要的存储,构造一个,然后将读取器传递给Storage进行加载。 依次存储所有项目,创建它们并将读取器传递给项目内容。这是可行的,无需多态。 (很多开关,呃)
问题是,当我想使事物清晰多变时,我遇到了一个问题,因为我俩都必须初始化基础和派生类。
这需要Call Super模式,由于QXmlStreamReader是有状态的,因此在更改XML文件的顺序时它将失败。 (没有重置)
这是有气味的,这是因为调用super和所有类都知道xml文件这一事实。
问题:
class Storage {
list Items;
string location;
virtual getItem();
virtual loadXML(reader);
}
class Container : Storage {
getItem();
loadXML(reader); // needs call super
}
class Item {
string name;
int size;
virtual loadXML(reader);
}
class Thing : Item {
specific property;
loadXML(reader); // needs call super
}
我还可以使用什么其他设计模式来基于XML文件构造这种分层实现?