gpt4 book ai didi

java - 如何使用构建器模式构建各种相似的对象类型?

转载 作者:行者123 更新时间:2023-11-30 11:49:27 25 4
gpt4 key购买 nike

我目前正在使用此处定义的构建器模式:

Previous question showing my use of the builder pattern

我现在遇到的问题是需要创建如下结构:

- ZipHolder: file metadata present
* File mainFile
* File optionalFile
* List<File> files

或者:

- ZipHolder: no file metadata present
* File mainFile
* File optionalFile
* List<File> files

ZipHolderFile 都是使用构建器模式构建的,实现为每个的内部静态类。 ZipHoldermainFile 作为必需的构造函数参数,并在 ZipHolder 中预填充一些信息,如果需要,可以覆盖这些信息。 File 包含文件内容和与该文件相关的元数据。然后在调用每个 Builder 类的 build() 方法时对 ZipHolderFile 执行验证。然后获取对象并将其输出到 ZIP 文件层次结构中,如果需要,应将其读入相同的对象结构。

这很好地工作,并在确保不变性的同时为对象创建提供了一定程度的灵 active 。我遇到了一个问题。一项新的要求已经出现,要求 File 对象可以具有元数据文件内容文件内容.我想我可以简单地将一个 boolean 标志值传递给 ZipHolder 对象的构建器,以允许跳过通常的元数据验证。这似乎没问题,但随后需要构建一个 File mainFile - 本质上,这是先有鸡还是先有蛋的情况。我的下一个想法是将标志移动到 File 类。这似乎没问题,直到我意识到您可能会创建多个 File 对象,其中一些对象需要元数据,而另一些对象仅包含文件内容,而无法全面实现约束。

所以我对如何进行感到有些困惑。我看不到以优雅的方式将 mainFileZipHolder 的要求解耦的明显方法。抽象类、接口(interface)、基类等概念浮现在脑海中,但在这种特殊情况下我需要一些指导。

所以我的问题是:

根据我上面链接中的原因,我可以在保留构建器模式的同时允许这两种情况吗?

最佳答案

我不太明白这个问题,但你应该创建一个类 MainFile extends File,在那里实现约束并要求用户将 MainFile 实例传递给 ZipHolder 工厂。

关于java - 如何使用构建器模式构建各种相似的对象类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8381321/

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