用工厂方法“隐藏”可变对象

时间:2013-04-24 12:48:01

标签: java design-patterns abstract-class immutability

我在 Effective Java:Programming Language Guide中阅读了一些内容 Joshua Bloch 并发现我应该避免使用可变对象。因为我读过这本书,所以我知道如何使一个可变对象不可变(例如使用私有和最终修饰符)。

但是我有一个带有一些私有字段的“虚拟”data holder class。每个字段都可以使用get方法和相应的set方法访问。因此,由于此set方法,此类的对象不是不可变的。

现在的问题是如何避免这些设定方法?将所有(例如20个)参数传递给对象构造函数?我认为这不是很好的设计,因为我必须保持参数的顺序,如果我不想设置一个特殊的参数,必须传递空引用等等。

所以我考虑采用以下方法:

  • 使用所有get方法创建一个接口,并让它从虚拟数据持有者类
  • 实现
  • 使用私有构造函数和静态工厂方法创建一个抽象类,该方法返回数据持有者对象的“get”接口实例。
  • 在静态工厂方法中,我使用所有必要的设置方法配置数据持有者对象
  • 使数据持有者类包成为私有,以便只能通过在抽象类中定义的静态工厂方法实例化对象

在下一步中,我将已配置和创建的data holder objects存储在列表中。

读取对象modify尽管它是不可变的最佳方法是什么?使用静态工厂方法创建一个新对象,该方法在内部设置新值并将其替换为列表中的对象?

1 个答案:

答案 0 :(得分:0)

正如@NilsH指出:你应该选择Builder pattern,理想情况是基于fluent interface

例如,您可以查看make-it-easy