原创转载请注明出处: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编程思想
本文通过一个具体的例子展示了在Scala中如何使用组合而非继承来构建复杂系统。通过定义一系列特质(traits),并利用这些特质来创建厨房和房屋的模型,演示了如何避免继承带来的问题。
801

被折叠的 条评论
为什么被折叠?



