gpt4 book ai didi

java - 构造函数 vs 方法 vs 工厂

转载 作者:行者123 更新时间:2023-12-01 12:56:26 25 4
gpt4 key购买 nike

想象一下您想要将某些文档导出到文件中(以某种格式......比如说 XML)。

为此,我有 XmlExporter 类,问题是...将文档和文件传递给此类的最佳方法是什么?

选项 1:导出器是无状态的,因此如果我想导出不同的文档或导出到不同的文件中,我只需更改参数即可。缺点是我必须在每个方法中传递文件(或者更确切地说 OutputStream)(在复杂文档的情况下可能会很多)

class XmlExporter {
public function export(Document document, File file) {
this.writeHeader(document.header, file);
this.writeSomeOtherStuff(document.somethingElse, file);
// and more ...
}

private function writeHeader(DocumentHeader header, File file) {
writeName(header.name, file); // passing file over and over again
}
}

选项 2:源和目标都存储在实例中。如果我想更改文件,我必须创建一个新对象,但现在我不需要担心传递所有必要的数据。

class XmlExporter {
private final Document document;
private final File file;
public XmlExporter(Document document, File file) {
this.document = document;
this.file = file;
}
public function export() {
this.writeHeader(this.document.header);
}
private function writeHeader(DocumentHeader header) {
this.writeName(header.name);
}
private function writeName(String name) {
// ...
}
}

选项 3:两者的结合

class DocumentExporter {
public static function exportToXml(Document document, File file) {
XmlExporter exporter = new XmlExporter(document, file);
exporter.export();
}
// the rest same as Option 2, probably with private constructor
}

基本上,从编写类的角度来看,第二个选择对我来说最有意义,因为我不需要传递目标文件/流;但从实际使用的角度来看,我觉得第一个选择更有意义。如果我想将其导出到标准输出而不是文件,或者导出多个文档怎么办?

最佳答案

首先,我会选择选项2,以支持稍后导出过程的扩展(在实例中存储状态、进度等)。如果您希望文件和文档可更改,您可以为它们添加公共(public)属性。

What if I wanted to export it into standard output instead of file, or export multiple documents?

尝试解耦 XmlExporter 类的功能。 XmlExporter 应该是一个Director,其职责是解析文档并通知运行时附加的处理程序(接口(interface)) - 一个处理程序实现可以将数据写入文件,另一个写入控制台。

查看构建器设计模式:http://www.blackwasp.co.uk/Builder.aspx

关于java - 构造函数 vs 方法 vs 工厂,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23847230/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com