Scala 如何实现单一工厂模式?

Scala 如何实现单一工厂模式?,scala,Scala,我希望有一些类型“ValidatedVals”,它可以由单个类专门实例化(即,它是ValidatedVals的单个工厂) 然后我想在许多其他类中引用这个ValidatedVals类型 私有构造函数似乎是一个答案。。。但是 下面的代码失败,因为(显然)一个内部类具有一个私有构造函数,在 object X{ ... } 使该构造函数在对象X中不可见 那么,在下面的代码中,我如何使其: 只有ValidatedValsFactory才能构造ValidatedVals对象 我可以在其他类中引用Val

我希望有一些类型“ValidatedVals”,它可以由单个类专门实例化(即,它是ValidatedVals的单个工厂)

然后我想在许多其他类中引用这个ValidatedVals类型

私有构造函数似乎是一个答案。。。但是

下面的代码失败,因为(显然)一个内部类具有一个私有构造函数,在

object X{  ... }
使该构造函数在对象X中不可见

那么,在下面的代码中,我如何使其:

  • 只有ValidatedValsFactory才能构造ValidatedVals对象
  • 我可以在其他类中引用ValidatedVals类型吗
_

  • 我不希望f的参数的类型是接口(因为通过实现接口很容易绕过验证)
  • 我无法将类ValidatedVals移动到ValidatedValsFactory的类定义中,因为ValidatedValsConsumer需要能够引用内部类typename(因此ValidatedVals必须是静态声明)

嘎嘎

考虑将您的
ValidatedVals
类型声明为密封类或特征。此处有更多详细信息:

考虑将您的
ValidatedVals
类型声明为密封类或特征。此处有更多详细信息:

考虑将您的
ValidatedVals
类型声明为密封类或特征。此处有更多详细信息:

考虑将您的
ValidatedVals
类型声明为密封类或特征。此处有更多详细信息:

如果将编译错误设置为对象的私有,则编译错误看起来会消失:

class ValidatedVals private[ValidatedValsFactory] (val a: Int, val b: Int) {}

如果将编译错误设置为对象私有,则编译错误似乎会消失:

class ValidatedVals private[ValidatedValsFactory] (val a: Int, val b: Int) {}

如果将编译错误设置为对象私有,则编译错误似乎会消失:

class ValidatedVals private[ValidatedValsFactory] (val a: Int, val b: Int) {}

如果将编译错误设置为对象私有,则编译错误似乎会消失:

class ValidatedVals private[ValidatedValsFactory] (val a: Int, val b: Int) {}

美好的还可以与Java共享该类。很好!还可以与Java共享该类。很好!还可以与Java共享该类。很好!还可以与Java共享该类。这只会阻止扩展,但不会控制实例化。我同意。“其他”答案更符合原始问题中所述的目标。这只会阻止扩展,但不会控制实例化。我同意。“其他”答案更符合原始问题中所述的目标。这只会阻止扩展,但不会控制实例化。我同意。“其他”答案更符合原始问题中所述的目标。这只会阻止扩展,但不会控制实例化。我同意。“其他”答案更符合原始问题中所述的目标。在Scala中,您将类
X
的工厂方法放置在
X
的伴生对象中,而不是
XFactory
。。。。这实际上取决于工厂是否包含state。在Scala中,将类
X
的工厂方法放置在
X
的伴随对象中,而不是
XFactory
。。。。这实际上取决于工厂是否包含state。在Scala中,将类
X
的工厂方法放置在
X
的伴随对象中,而不是
XFactory
。。。。这实际上取决于工厂是否包含state。在Scala中,将类
X
的工厂方法放置在
X
的伴随对象中,而不是
XFactory
。。。。那真的取决于你们的工厂是否有州政府。