2016-09-07 92 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