我阅读了Effective Java: Programming Language Guide Joshua Bloch中的一些内容,发现我应该避免使用可变对象。因为我读过这本书,我知道如何使可变对象不可变(例如使用 private 和 final 修饰符)。
data holder class
好吧,但是我有一个带有一些私有字段的“假人” 。每个字段都可以通过 get 方法和相应的 set 方法访问。所以由于这个设置方法,这个类的对象不是不可变的。
现在的问题是如何避免这些设置方法?将所有(例如 20 个)参数传递给对象构造函数?我认为这不是很好的设计,因为我必须注意参数的顺序,如果我不想设置特殊参数则必须传递空引用等等。
所以我考虑以下方法:
- 创建一个包含所有 get 方法的接口,并让它从虚拟数据持有者类中实现
- 使用私有构造函数和静态工厂方法创建一个抽象类,该方法返回数据持有者对象的“get”接口实例。
- 在静态工厂方法中,我使用所有必要的设置方法配置数据持有者对象
- 将数据持有者类包设为私有,以便对象只能通过抽象类中定义的静态工厂方法进行实例化
在下一步中,我将配置和创建的内容存储data holder objects
在一个列表中。
modify
尽管对象是不可变的,但读取对象和对象的最佳方法是什么?使用静态工厂方法创建一个新对象,该方法在内部设置新值并将其替换为列表中的对象?