Skip to content

Instantly share code, notes, and snippets.

@dannylagrouw
Created December 28, 2009 22:25
Show Gist options
  • Save dannylagrouw/264999 to your computer and use it in GitHub Desktop.
Save dannylagrouw/264999 to your computer and use it in GitHub Desktop.
trait AbstractCreatureBuilder {
var bodyParts = List.empty[String]
def creatureType: String
def addBodyPart(name: String): AbstractCreatureBuilder
override def toString = {
"A " + creatureType + " with " + bodyParts.mkString(", ")
}
}
class HumanCreatureBuilder extends AbstractCreatureBuilder {
override def creatureType = "human"
override def addBodyPart(name: String): HumanCreatureBuilder = {
bodyParts ::= "human " + name
this
}
def addSelfAwareness: HumanCreatureBuilder = {
addBodyPart("self awareness")
}
}
class AnimalCreatureBuilder extends AbstractCreatureBuilder {
override def creatureType = "animal"
override def addBodyPart(name: String): AnimalCreatureBuilder = {
bodyParts ::= "animal " + name
this
}
def addClaws: AnimalCreatureBuilder = {
addBodyPart("claws")
}
}
object SubBuilder {
def main(args : Array[String]) : Unit = {
println((new HumanCreatureBuilder).addBodyPart("eyes").addBodyPart("nose").addBodyPart("mouth").addSelfAwareness)
println((new AnimalCreatureBuilder).addBodyPart("eyes").addBodyPart("beak").addBodyPart("wings").addClaws)
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment