已经阅读了如何通过以下步骤使类不可变
- 不要提供“setter”方法——修改字段或字段引用的对象的方法。
- 将所有字段设为最终字段和私有字段。
- 不允许子类覆盖方法。最简单的方法是将类声明为 final。更复杂的方法是使构造函数私有并在工厂方法中构造实例。
- 如果实例字段包含对可变对象的引用,则不允许更改这些对象
:不要提供修改可变对象的方法。
湾。不要共享对可变对象的引用。永远不要存储对传递给构造函数的外部可变对象的引用;如有必要,创建副本并存储对副本的引用。同样,在必要时创建内部可变对象的副本以避免在方法中返回原始对象。
我不确定我是否清楚地了解私有构造函数和工厂方法在不变性上下文中的效用。如果我将课程定为最终课程,则基本上是关闭任何其他扩展它的课程的所有路径。所说的更复杂的方法如何
我已经看到了单例模式中的私有构造函数、工厂方法,这是有道理的。但是当我们谈论对象不变性时,当我们提到私有构造函数和静态工厂方法时,我们是否也在限制对象构造/实例化?