4
在使用不可变对象时,是否有一种特定的设计策略可用于解决大多数“鸡与蛋”问题?
来自OOP背景(Java),我自己学习Scala。虽然我很容易看到单独使用不可变对象的优点,但我很难理解如何设计这样的整个应用程序。我举一个例子: 假设我有代表“材料”及其属性的对象(我在设计游戏,所以我实际上确实有这个问题),例如水和冰。我将拥有一个拥有所有此类材料实例的“经理”。一种特性是凝固点和熔点,以及材料冻结或融化的温度。 [编辑]所有的实例都是“单例”,有点像Java枚举。 我想让“水”说在0C时冻结成“冰”,而“冰”说在1C时熔化成“水”。但是,如果水和冰是不可变的,则它们不能作为构造函数参数相互引用,因为其中一个必须首先创建,并且不能将尚未存在的另一个作为构造函数参数进行引用。我可以通过给他们两个都提供给经理的参考来解决这个问题,以便他们每次查询冻结/融化属性时都可以查询它以找到他们需要的其他材料实例,但是随后经理之间也遇到了同样的问题和材料,它们需要相互引用,但是只能在构造函数中为它们之一提供引用,因此管理器或材料不能是不变的。 他们只是无法解决这个问题,还是我需要使用“功能”编程技术或其他某种模式来解决它?