/**
* 嵌套匹配模式
*
* 样例类经常被用作嵌套结构.
*
* 例如: 某商场售卖货物, 经常把商品捆绑在一起进行打折销售.
*
* 案例:
*
* 现在有一些商品,请使用 Scala 设计相关的样例类,完成商品可以捆绑打折出售。
*
* 要求商品捆绑可以是单个商品,也可以是多个商品。
*
* 打折时按照折扣xx元进行设计.
*
* 能够统计出所有捆绑商品打折后的最终价格
*/
/**
* 统计商品的价格
*/
object GoodsDis {
def main(args: Array[String]): Unit = {
val sale = Bundle("书籍",10,Book("漫画",40),
Bundle("文学",20,Book("《阳关》",80),Book("《围城》",30)))
println(price(sale)) //120.0
val sale1 = Book("《阳关》",80)
println(price(sale1)) //80.0
}
def price(item: Item):Double = {
item match {
//如果传入的是一本书 就返回一本书的价格
case Book(_,p) => p
//如果传入的是bundle 就返回bundle的最终计算的价格
case Bundle(_,dis, its@ _*) =>its.map(price).sum - dis
}
}
}
abstract class Item //项 设计模式
//样式类
case class Book(desc:String,price:Double) extends Item
//样式类
case class Bundle(desc:String,discount:Double,item: Item*) extends Item