Traits-Scala

创建Traits

package traits

trait DonutShoppingCartDao {

  def add(donut: String): Long

  def update(donut: String): Boolean

  def search(donut: String): String

  def delete(donut: String): Boolean

}


package traits

class DonutShoppingCart extends DonutShoppingCartDao {

  override def add(donut: String): Long = {
    println(s"DonutShoppingCart -> add method -> $donut")
    1
  }

  override def update(donut: String): Boolean = {
    println(s"DonutShoppingCart -> update method -> $donut")
    true
  }

  override def search(donut: String): String = {
    println(s"DonutShoppingCart -> search method -> $donut")
    donut
  }

  override def delete(donut: String): Boolean = {
    println(s"DonutShoppingCart -> delete method -> $donut")
    true
  }
}


val donutShoppingCart : DonutShoppingCart = new DonutShoppingCart()
donutShoppingCart.add("world")
donutShoppingCart.delete("world")
donutShoppingCart.search("world")
donutShoppingCart.update("world")

val donutShoppingCart1 : DonutShoppingCartDao = new DonutShoppingCart()
donutShoppingCart1.add("hello")
donutShoppingCart1.delete("hello")
donutShoppingCart1.search("hello")
donutShoppingCart1.update("hello")

创建Traits(类型参数)

package traits

trait DonutShoppingCartDao[A] {

  def add(donut: A): Long

  def update(donut: A): Boolean

  def search(donut: A): A

  def delete(donut: A): Boolean

}

package traits

class DonutShoppingCart[A] extends DonutShoppingCartDao[A] {

  override def add(donut: A): Long = {
    println(s"DonutShoppingCart -> add method -> $donut")
    1
  }

  override def update(donut: A): Boolean = {
    println(s"DonutShoppingCart -> update method -> $donut")
    true
  }

  override def search(donut: A): A = {
    println(s"DonutShoppingCart -> search method -> $donut")
    donut
  }

  override def delete(donut: A): Boolean = {
    println(s"DonutShoppingCart -> delete method -> $donut")
    true
  }
}


val donutShoppingCart : DonutShoppingCart[String] = new DonutShoppingCart[String]()
donutShoppingCart.add("world")
donutShoppingCart.delete("world")
donutShoppingCart.search("world")
donutShoppingCart.update("world")

val donutShoppingCart1 : DonutShoppingCartDao[String] = new DonutShoppingCart[String]()
donutShoppingCart1.add("hello")
donutShoppingCart1.delete("hello")
donutShoppingCart1.search("hello")
donutShoppingCart1.update("hello")

创建Traits(多个traits)

package traits

trait DonutShoppingCartDao[A] {

  def add(donut: A): Long

  def update(donut: A): Boolean

  def search(donut: A): A

  def delete(donut: A): Boolean

}

package traits

class DonutShoppingCart[A] extends DonutShoppingCartDao[A] with CheckInventoryServcie[A] {

  override def add(donut: A): Long = {
    println(s"DonutShoppingCart -> add method -> $donut")
    1
  }

  override def update(donut: A): Boolean = {
    println(s"DonutShoppingCart -> update method -> $donut")
    true
  }

  override def search(donut: A): A = {
    println(s"DonutShoppingCart -> search method -> $donut")
    donut
  }

  override def delete(donut: A): Boolean = {
    println(s"DonutShoppingCart -> delete method -> $donut")
    true
  }

  override def checkInventories(donut: A): Int = {
    println(s"DonutShoppingCart -> check inventory method -> $donut")
    10
  }
}

val donutShoppingCart : DonutShoppingCart[String] = new DonutShoppingCart[String]()
donutShoppingCart.add("world")
donutShoppingCart.delete("world")
donutShoppingCart.search("world")
donutShoppingCart.update("world")
donutShoppingCart.checkInventories("world")

依赖注入

package traits

trait DonutDatabase[A] {

  def addOrUpdate(donut: A): Long

  def search(donut: A): A

  def delete(donut: A): Boolean

}

package traits

class HbaseDatabase[A] extends DonutDatabase[A] {

  override def addOrUpdate(donut: A): Long = {
    println(s"HbaseDatabase -> add method -> $donut")
    1
  }

  override def search(donut: A): A = {
    println(s"HbaseDatabase -> search method -> $donut")
    donut
  }

  override def delete(donut: A): Boolean = {
    println(s"HbaseDatabase -> delete method -> $donut")
    true
  }
}

package traits

trait DonutShoppingCartDao[A] {

  val donutDatabase: DonutDatabase[A]

  def add(donut: A): Long = {
    donutDatabase.addOrUpdate(donut)
  }

  def update(donut: A): Long = {
    donutDatabase.addOrUpdate(donut)
  }

  def search(donut: A): A  = {
    donutDatabase.search(donut)
  }

  def delete(donut: A): Boolean = {
    donutDatabase.delete(donut)
  }

}

package traits

trait CheckInventoryServcie[A] {

  val donutDatabase: DonutDatabase[A]

  def checkInventories(donut: A): Int = {
    donutDatabase.search(donut)
    10
  }

}

package traits

trait DonutShoppingCartServices[A] extends DonutShoppingCartDao[A] with CheckInventoryServcie[A] {

  override val donutDatabase: DonutDatabase[A] = new HbaseDatabase[A]();

}


package traits

class DonutShoppingCart[A] extends DonutShoppingCartServices[A] {
}


val donutShoppingCart : DonutShoppingCart[String] = new DonutShoppingCart[String]()
donutShoppingCart.add("world")
donutShoppingCart.delete("world")
donutShoppingCart.search("world")
donutShoppingCart.update("world")
donutShoppingCart.checkInventories("world")

工厂模式

package traits

object Cakes {

  trait cake {
    def name: String
  }

  class DonutCake extends cake {
    override def name: String = {
      "DonutCake"
    }
  }

  class unknownCake extends cake {
    override def name: String = {
      "Unknown"
    }
  }

}


package traits

object CakeFactory {

  import Cakes._

  def apply(name: String): cake = {
    name match {
      case "Donut" => new DonutCake()
      case _ => new unknownCake()
    }
  }

  def main(args: Array[String]): Unit = {
    println(CakeFactory.apply("Donut").name)
    println(CakeFactory.apply("world").name)
  }

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值