2013-02-16 60 views
2

我公司拥有一批在斯卡拉无状态的对象,我想起来组合成一个API的 - 一种门面如下:如何通过组合其他对象的API来创建API Facade?

object tools { 
    // List all methods in toolA 

    // List all methods in toolB 

    // List all methods in toolC 

} 
object ToolA { ... } 
object ToolB { ... } 
object ToolC { ... } 

显然,这是令人讨厌的tools维持列表,在方法ToolAToolBToolC正在改变很多。 A/B/C中没有状态,并且没有设置参数。

什么是说... 方式“使tools包含ToolAToolB,并且ToolC集合所有的方法”

回答

6

定义ToolA,B和C的特征,而不是

trait ToolA { 
    //stateless methods in ToolA 
} 

然后,你可以做

object tools extends ToolA with ToolB with ToolC 

你也可以有一个辅助对象只针对ToolA,ToolB和ToolC

object toolA extends ToolA 
object toolB extends ToolB 
object toolC extends ToolC 
+0

谢谢!这正是我所怀疑的:有一些反复使用“with trait”的语法! Java-ism不起作用,例如使用A,B,C扩展Foo – Hamy 2013-02-16 01:12:20

+2

Scala中特性的扩展功能非常强大。至少应该意识到,特征不限于定义纯粹的抽象类型(没有实现)。实际上,它们可以自由混合抽象(未实现)和具体(已实现)的值和方法。他们最大的限制是缺少构造函数参数。 – 2013-02-16 02:13:27