Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala工厂模式与一致性_Scala_Design Patterns_Akka_Factory Pattern - Fatal编程技术网

Scala工厂模式与一致性

Scala工厂模式与一致性,scala,design-patterns,akka,factory-pattern,Scala,Design Patterns,Akka,Factory Pattern,希望对进一步了解scala有所帮助 我经常看到这是一种工厂模式: trait Animal private class Dog extends Animal private class Cat extends Animal object Animal { def apply(kind: String) = kind match { case "dog" => new Dog() case "cat" => new Cat()

希望对进一步了解scala有所帮助

我经常看到这是一种工厂模式:

trait Animal 
private class Dog extends Animal 
private class Cat extends Animal

object Animal {   
    def apply(kind: String) = kind match {
       case "dog" => new Dog()
       case "cat" => new Cat()   
    } 
}   
Animal("dog")
我想知道,考虑到对象的使用,这对于一致性意味着什么。在为许多客户提供服务时,使用这样的工厂模式是否“足够好”?工厂会是一个循环访问的演员池吗?是否有更好的基于期货的方法?我希望避免工厂模式成为设计中的瓶颈,因为在这些设计中,有很多短生命的动物实例被创建


或者我只是被误导了,担心工厂会成为瓶颈?

这是一个很大的问题,与上面给出的例子相比有一点飞跃。你能把它缩小一点吗?并发是关于对共享状态的变异的争用,上面的例子中没有变异,所以在这种情况下,一个就可以了。但我们不能将其推广到构建器模式的所有用途。如果您担心JVM分配对象的争用,那么请澄清一下,我们可以讨论一下。我认为您担心得太多了。这是一个简单的对象创建。你没有任何可变状态,所以根本不用担心。这个问题没有任何意义。您的
apply
方法可以由任意多个线程并行调用。它没有共享任何可变状态。谢谢您的回答。我想我不太理解这个概念。我的想法是,既然“对象”是一个单例,我就必须在apply方法中处理“锁定”问题。但正如所指出的,在这个例子中没有状态。这些评论确实有助于澄清,谢谢大家。