LoginSignup
4
4

More than 5 years have passed since last update.

Builder pattern (Design patterns in Scala)

Posted at

abstract class Product

abstract class PizzaBuilder {
var dough: String
var sauce: String
var topping: String

def withDough(dough: String): PizzaBuilder
def withSauce(sauce: String): PizzaBuilder
def withTopping(topping: String): PizzaBuilder

def build: Product
}

class Pizza(builder: PizzaBuilder) extends Product {
val dough: String = builder.dough
val sauce: String = builder.sauce
val topping: String = builder.topping

override def toString: String = {
"Dough:" + dough + " Topping:" + topping + " Sauce:" + sauce
}
}

class Cook extends PizzaBuilder {
var dough: String = ""
var sauce: String = ""
var topping: String = ""

override def withDough(dough: String): PizzaBuilder = {
this.dough = dough
this
}

override def withSauce(sauce: String): PizzaBuilder = {
this.sauce = sauce
this
}

override def withTopping(topping: String): PizzaBuilder = {
this.topping = topping
this
}

override def build: Product = new Pizza(this)
}

object PizzaBuilderExample {
def main(args: Array[String]) = {
val hawaiianCook = new Cook().withDough("cross").withTopping("ham+pineapple").withSauce("mild")
val hawaiianPizza = hawaiianCook.build
println("Hawaiian Pizza:" + hawaiianPizza)
}
}

PizzaBuilderExample.main(Array())

4
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
4