构建具有嵌套实体的对象。设计模式

时间:2016-09-27 08:38:34

标签: java design-patterns

我正在使用Java 1.6

方案: 我有一个名为'pnr'的实体结构,如下所示:

<pnr>
    <outbound>
        <travellers>
            <person>
                <name></name>
                <address></address>
            </person>
            <person>
                <name></name>
                <address></address>
            </person>
        </travellers>
        <segments>
            <segment>
                <from></from>
                <to></to>
                <date></date>
                <flight-details>
                    <flight-id></flight-id>
                </flight-details>
            </segment>

            <segment>
                <from></from>
                <to></to>
                <date></date>
                <flight-details>
                    <flight-id></flight-id>
                </flight-details>
            </segment>
        </segments>
    </outbound>

    <inbound>
        ...
    </inbound>
</pnr>

我想构建一个结构与上面的XML类似的对象。 我从类“Pnr”的对象开始,看起来像这样:

class Pnr{
    Outbound outbound;
    Inbound inbound;
}

//Outbound
class Outbound{
    ...
}

//Inbound
class Inbound{
    ...
}

实体的嵌套如下,每个实体由一个类表示。

请建议一个设计模式来构建嵌套的Pnr对象。

我已经完成了构建模式。 但就我而言: 1)我们没有太多参数传递给任何构造函数。 2)我们一直希望构建整个Pnr对象。所以我们不需要许多具有不同参数列表的构造函数。

但我必须有效地处理嵌套实体的构建。 我还应该使用构建模式吗?

如果没有,请说明哪种设计模式适合这种情况。

谢谢!

2 个答案:

答案 0 :(得分:1)

我认为你这里弄错了。序列化数据的布局(例如,将信息写入XML文件时)不应影响的设计。

示例:在您的XML中,您将这些类别设置为“入站”和“出站”。你真的需要对象模型;意思是:你真的想在你的班级结构中“修复”吗?

我所说的是:专注于对象模型的设计。在那里你定义实体,类;更具体地说:你可以定义对象的合理属性。

然后,当您想出足够的模型时,您会考虑从XML写入/读取的转换。

喜欢:你可能正在使用SAX解析器;当该解析器出现“person”信息时,它会收集所需信息并创建一个Person对象。然后,下一层可能决定将创建的“n”Person对象添加到构成“旅行者”的某种集合中。但也许旅行者不需要上课;可能只是一个简单的List<Person>而已。

长话短说:你把事情倒退了。您不会基于某些XML架构开发对象模型。相反!

答案 1 :(得分:0)

你检查过装饰模式吗?在你的情况下,我们不确定是否需要创建这么多实体。但如果实体必须按照你的说法进行子类化,我们可以使用Decorator Pattern

但是,理想情况下,SAX解析器应该与Person,FlightDetails等实体以及一个具有这些元素列表的类一起使用。例如,请参考http://tutorials.jenkov.com/java-xml/sax-example.html