scala设计模式--装饰模式

装饰模式

/**
  * 水果特质,定义价格和名称两个抽象方法
  */

trait Fruits {
  def price(): Double

  def name(): String
}

/**
  * 定义三个特质作为水果子类
  */
trait Apple extends Fruits {
  abstract override def price() = super.price() + 10

  abstract override def name() = super.name() + "\n+苹果"
}

trait Banana extends Fruits {
  abstract override def price() = super.price() + 5

  abstract override def name() = super.name() + "\n+香蕉"
}

trait Cherry extends Fruits {
  abstract override def price() = super.price() + 20

  abstract override def name() = super.name() + "\n+樱桃"
}

/**
  * 这里定义为trait 也是一样
  */
class Cashier extends Fruits {
  //定义初始值,实现抽象方法
  override def price() = 0

  override def name() = ""
}

/**
  * 客户端调用,类似java的装饰模式
  */

object Client extends App {

  //对象混入特质
  private val order1 = new Cashier with Cherry with Apple
  //with Banana with Cherry
  println("-----------------order1-->")
  println("本次购买的水果:" + order1.name())
  println("总价:" + order1.price())

  println("---------------order2-->")
  private val order2 = new Cashier with Banana with Apple with Cherry

  println("本次购买的水果:" + order2.name())
  println("总价:" + order2.price())

}

执行结果:
-----------------order1-->
本次购买的水果:
+樱桃
+苹果
总价:30.0
---------------order2-->
本次购买的水果:
+香蕉
+苹果
+樱桃
总价:35.0

Process finished with exit code 0
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值