我正在学习GoF Java设计模式,我想看看它们的一些真实例子.Java核心库中这些设计模式的一些很好的例子是什么?
GoF的原始Builder模式与Joshua Bloch的"修订后的GoF Builder模式"有什么区别?
我将Builder模式用于我项目的几个类(多个参数,一些是强制的,一些是可选的,等等).这些类是不可变的(没有setter,集合getter的深层副本).
我现在尝试使用持久性框架将这些对象存储在数据库中,该框架使用默认构造函数+ setter构造对象.它不太喜欢我的建设者!
我不想将这种设置降级为POJO并失去当前设计的优点(灵活性,不变性,构造安全性).
我欢迎任何关于可以在这种情况下使用的变通方法的反馈(我可以包装这些类中的每一个,但这会使类的数量增加一倍,我宁愿避免这种情况).
一篇文章实际上指出这是Builder模式的一个特定缺点.
编辑
一个答案建议使用私有构造函数/ setter,但只有在类的字段不是final时才有效,这不是我的情况.
最终编辑
谢谢大家.
我认为我的最终解决方案看起来像这样并且工作正常(为了记录,我正在使用MongoDB + Morphia):
class AClass {
private final String aField;
private final AClass() {
aField = "";
}
//Standard builder pattern after that - no setters (private or public)
}
Run Code Online (Sandbox Code Playgroud)