Builderパターン。
package designpattern.builderimport scala.Enumeration
sealed trait Animal { val value: String }
object Lion extends Animal {val value = "Lion"}
object Eagle extends Animal {val value = "Eagle"}
object Human extends Animal {val value = "Human"}class CompositAnimal(var element1: Animal, var element2: Animal) {
override def toString = element1.value + " + " + element2.value
}trait Composer {
val result = new CompositAnimal(null, null)
def setElement1: Unit
def setElement2: Unit
}class GrifonComposer extends Composer {
def setElement1 = result.element1 = Lion
def setElement2 = result.element2 = Eagle
}class SphinxComposer extends Composer {
def setElement1 = result.element1 = Lion
def setElement2 = result.element2 = Human
}class EaglemanComposer extends Composer {
def setElement1 = result.element1 = Eagle
def setElement2 = result.element2 = Human
}class Director(var composer: Composer) {
def getCompositAnimal = composer.result
def compose = {
composer.setElement1
composer.setElement2
}
}object Main {
def main(args: Array[String]) = {
val director1 = new Director(new GrifonComposer)
director1.compose
val grifon = director1.getCompositAnimal
println(grifon)val director2 = new Director(new SphinxComposer)
director2.compose
val sphinx = director2.getCompositAnimal
println(sphinx)
}
}