在我日常使用Java进行的工作中,我为流畅的接口使用了大量构建器,例如: new PizzaBuilder(Size.Large).onTopOf(Base.Cheesy).with(Ingredient.Ham).build();
使用快捷方法Java,每个方法调用都会更改构建器实例并返回this
。一成不变的是,它涉及更多的类型输入,在修改之前先克隆构建器。构建方法最终会在构建器状态上进行繁重的工作。
在Scala中实现相同目标的一种好方法是什么?
如果我想,以确保onTopOf(base:Base)
被称为只有一次,随后只with(ingredient:Ingredient)
和build():Pizza
可称为,一拉定向建设者,我怎么会去接近这个?
Scala
2.8中Builder模式的另一种替代方法是使用具有默认参数和命名参数的不可变case类。有点不同,但效果是智能默认值,所有指定的值以及仅通过语法检查指定一次的内容…
以下使用字符串作为简洁/速度的值…
scala> case class Pizza(ingredients: Traversable[String], base: String = "Normal", topping: String = "Mozzarella")
defined class Pizza
scala> val p1 = Pizza(Seq("Ham", "Mushroom"))
p1: Pizza = Pizza(List(Ham, Mushroom),Normal,Mozzarella)
scala> val p2 = Pizza(Seq("Mushroom"), topping = "Edam")
p2: Pizza = Pizza(List(Mushroom),Normal,Edam)
scala> val p3 = Pizza(Seq("Ham", "Pineapple"), topping = "Edam", base = "Small")
p3: Pizza = Pizza(List(Ham, Pineapple),Small,Edam)
然后,您也可以将现有的不可变实例也用作构建器…
scala> val lp2 = p3.copy(base = "Large")
lp2: Pizza = Pizza(List(Ham, Pineapple),Large,Edam)
问题内容: Scala与Java的静态块等效吗? 问题答案: 伴随对象的构造函数(即主体)中的代码与Java类的静态初始化程序块中的代码 不 完全相同。在下面的示例中,我创建了A的实例,但是没有发生初始化。 要在创建类的第一个实例时触发伴随对象的构造,可以从类构造函数中访问它。 在许多情况下,差异并不重要。但是,如果您要发射导弹(或其他副作用),您可能会在意!
问题内容: 就像在Java 8中(某种程度上)等同于Scala的类型一样,是否也等同于Scala的类型? 问题答案: Java 8 没有类型,因此您需要自己创建一个或使用一些第三方库。 您可以使用新类型来构建这样的功能(但请阅读此答案的结尾): 用例示例: 回顾起来,基于基础的解决方案更像是一个学术实例,而不是推荐的方法。一个问题是对“空” 的处理,这与“任一个”的含义相矛盾。 以下代码显示了一个
问题内容: 我有一些需要在C++中模仿的示例Python代码。我不需要任何特定的解决方案(例如基于协同例程的收益解决方案,尽管它们也是可接受的答案),我只需要以某种方式重现语义即可。 python 这是一个基本的序列生成器,显然太大了,无法存储实例化版本。 目标是维护上述序列的两个实例,并以半锁步的方式在块上进行迭代。在下面的示例中,使用对的序列来初始化缓冲区,然后重新生成 相同的精确序列 并再次
我需要在没有静态嵌套类的情况下实现Builder模式。如果我有遗传,最好的方法是什么?让我们想象一下我有下面的课。 是创建一个Builder类来负责设置PassengerCar和Truck的值更好,还是我们需要另外三个类,CarBuilder,PassengerCarBuilder extends CarBuilder和TruckBuilder extends CarBuilder?
本文向大家介绍设计模式构建器模式/Java 实现,包括了设计模式构建器模式/Java 实现的使用技巧和注意事项,需要的朋友参考一下 示例 通过Builder模式,您可以以易于阅读的方式创建具有许多可选变量的类的实例。 考虑以下代码: 如果所有参数都是必需的,那么一切都很好。如果有更多的变量和/或其中一些是可选的怎么办?您不想使用必需参数和可选参数的每种可能的组合来创建大量的构造函数,因为它变得难以
问题内容: 在Scala中,我们可以编写 编译器如何实现?我可以从Java 拨打电话,但从Java发出错误 JVM是否本地支持单例? Java中是否可能有没有构造函数的类? 注意:这是代码输出 问题答案: 对单例的支持 不在语言级别上,但是该语言提供了足够的功能来创建它们而没有任何麻烦。 考虑以下代码: 这是来自Wikipedia的示例,该示例说明了如何制作单例。实例保存在私有字段中,在类外部无法