Design Patterns in Scala