Java 从XML文件实例化对象的设计范例
对于uni分配,我正在编写一个java程序,它需要将对象层次结构保存并加载到XML文件中。例如,程序创建一个包含动物子类列表的Zoo类,将其保存为XML,并在用户下次启动程序时再次加载 该文件可能看起来像Java 从XML文件实例化对象的设计范例,java,design-patterns,Java,Design Patterns,对于uni分配,我正在编写一个java程序,它需要将对象层次结构保存并加载到XML文件中。例如,程序创建一个包含动物子类列表的Zoo类,将其保存为XML,并在用户下次启动程序时再次加载 该文件可能看起来像 <Zoo> <Animals> <Lion> <name>Leo</name> <age>5</age> <
<Zoo>
<Animals>
<Lion>
<name>Leo</name>
<age>5</age>
<roar>fearsome</roar>
</Lion>
<Elephant>
<name>Dumbo</name>
<age>10</age>
<ears>let him fly</ears>
</Elephant>
</Animals>
</Zoo>
狮子座
5.
可怕的
小飞象
10
让他飞吧
我需要支持的动物亚类数量很少,数量有限(~5)。动物的每个亚类都有各自的属性(如耳朵和吼叫)。对于对象创建和文件创建的最佳设计模式是什么,我感到困惑
目前,我有一个类,XMLCreator
,它的方法有void createzoonement(Zoo)
,void createlioneelement(Lion)
等,还有一个XMLReader类,它有private Zoo createZoo(File)
,private Lion createLionObject(Element)
如果这是您希望将来由其他人维护的代码,那么这是一种好方法吗?或者每个对象都应该有一个构造函数方法(将文件/元素作为参数)和另一个方法(返回文件/XMLElement)?哪种封装/可维护性最好?我只会使用它,它允许将对象树(带注释的类)编组为XML,并将XML解编组为对象树。XML API还有其他对象,但JAXB与Java SE一起提供,并且运行良好。在我看来,您需要
Builder
模式或Factory
模式。查看维基百科了解更多详细信息。我会选择工厂
模式,因为我更熟悉它。与其将其命名为XMLCreator
,我还不如将其命名为AnimalFactory
:
public class AnimalFactory () {
private static final AnimalFactory instance = new AnimalFactory ();
// I make this private so that I can be sure there is only one instance
// of the object. This is another pattern, the `Singleton`
private AnimalFactory () {};
// This is how you would access the instance
public static AnimalFactory getInstance () { return instance; }
// This is where you create the animal instances.
public Lion getLion () {...}
public Elephant getElephant () {...}
}
你需要和我一起去
您必须实施startElement。。。可爱的。。。其他的也很少
您可以通过读取startElement方法中的元素来更改解析策略
我相信这应该很容易
应该读一本好书
此外,如果你继续创建像void createZooElement(Zoo)这样的方法,那么一天结束时,你将得到数百个无法管理的方法。这里有很多不错的选择。用于xml数据绑定 需要XML模式
,需要一个映射文件。使用,您可以序列化大多数Java对象,而无需任何映射。对象名称成为生成的XML中的元素名称,类中的字符串构成XML的元素内容。使用XStream序列化的类不需要实现可序列化接口。XStream是一种序列化工具,而不是数据绑定工具,这意味着出于好奇,它不会从XML或XML模式定义(XSD)文件执行类生成,“uni”代表什么?我觉得大部分的答案都没有解决OP的主要问题——“我不清楚对象创建和文件创建的最佳设计模式是什么”。我想只有anonymous对工厂模式的建议很接近。@Trasvi家庭作业标签不推荐使用。请参阅此问题右侧的社区公告博客