我正在使用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对象。所以我们不需要许多具有不同参数列表的构造函数。
但我必须有效地处理嵌套实体的构建。 我还应该使用构建模式吗?
如果没有,请说明哪种设计模式适合这种情况。
谢谢!
答案 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