- 我熟悉不变性并可以设计不可变类,但我大多只有理论知识,缺乏实际经验。
- 请参考上面链接的图片(暂时不允许嵌入)。
- 从下往上看。
- 学生需要一个新地址。
- 我们不是真正地改变学生,而是创建一个新的学生,其中包含新地址。
- 修改器方法返回这个新对象。
问题:假设修改器调用来自不可变对象,应该对这个新对象怎么办?
- 不能将新学生保存在Lecture中,因为Lecture也是不可变的。
- 因此,我们还需要一个新的Lecture,其中包含新的Student。
- 但是要在哪里保存新的Lecture?
- 当然是在新Semester中,但这是否有止境?
- 至少可以通过使用组件门面模式来打破这种链,该模式处理了所有新对象的创建,而无需将调用转发到整个链中。
问题:这会在哪里停止?难道不必在顶层实例中至少保存可变对象吗?