XML配置的OO设计模式

时间:2018-08-01 14:26:21

标签: oop design-patterns

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文件构造这种分层实现?

0 个答案:

没有答案