原创转载请注明出处:http://agilestyle.iteye.com/blog/2334870
食物与厨具具有存储、烹饪、清洗的能力,表示成一个“has-a”的关系
厨房和房间,为了突出厨房的“房间性”,表示成一个“is-a”的关系
记住:Prefer composition to inheritance
package org.fool.scala.composition trait Building trait Room trait Storage trait Sink trait Store[T] trait Cook[T] trait Clean[T] trait Food extends Store[Food] with Clean[Food] with Cook[Food] trait Utensil extends Store[Utensil] with Clean[Utensil] with Cook[Utensil] trait Kitchen extends Room { val storage: Storage val sinks: Vector[Sink] val food: Food val utensils: Vector[Utensil] } trait House extends Building { val kitchen: Vector[Kitchen] } object CompositionTest extends App { }
参考资料:
Scala编程思想