2016-09-07 94 views
0

在我上一類堆疊功能與代表團更換代表團蛋糕

trait Backend { 
    def product(id: Int): String 
} 

class MyBackend extends Backend { 
    def product(id: Int) = "My product" 
} 

class LoggingBackend(underlying: Backend) extends Backend { 
    override def product(id: Int) = { 
    println(s"get product $id") 
    underlying.product(id) 
    } 
} 

class CachingBackend(underlying: Backend) extends Backend { /* ... */ } 

是否有可能像這樣的東西替換此代碼的那一刻?

trait Logging { 
    this : Backend => 

    def product(id: Int) = { 
    println(s"get product $id") 
    /* Don't know what to write here */ 
    } 
} 

class MyLoggingBackend extends MyBackend with Logging 

回答

3

你只需要改變Logging

trait Logging extends Backend { 
    abstract override def product(id: Int) = { 
    println(s"get product $id") 
    super.product(id) 
    } 
} 
+0

謝謝,這工作得很好。有沒有辦法以某種方式注入運行時配置,比如Redis的'CachingBackend'url? – synapse