Skip to content

Instantly share code, notes, and snippets.

@flashingpumpkin
Forked from kencoba/Builder.scala
Created June 16, 2014 11:19
Show Gist options
  • Save flashingpumpkin/741b6a029728c0b73800 to your computer and use it in GitHub Desktop.
Save flashingpumpkin/741b6a029728c0b73800 to your computer and use it in GitHub Desktop.
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())
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment