这个问题有点理论化。我有一个对象,其中包含一个私有可变列表或映射,其增长仅是附加的。我相信我可以争辩说对象本身是功能性的,在功能上是透明的,并且对于所有外观而言,是不可变的。所以例如我有
import scala.collection.mutable.Map
case class Foo(bar:String)
object FooContainer {
private val foos = Map.empty[String, Foo]
def getFoo(fooName:String) = foos.getOrElseUpdate(fooName, Foo(fooName))
}
我可以用列表做一个类似的案例。现在我想象要真正发挥功能,我需要确保线程安全,我想我可以简单地使用锁、同步或原子引用来做到这一点。我的问题是这一切都是必要的和充分的,这是一种常见的做法,这种行为是否有既定的模式?