创建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)
}
}