我是Martin Fowler(已弃用)模型 - 视图 - 演示者模式的粉丝。我正在编写一个包含几个按钮类的Scala视图类。我想包括设置按钮的动作属性的方法,由演示者调用。典型的代码片段如下所示:
private val aButton = new JButton
def setAButtonAction(action: Action): Unit = { aButton.setAction(action) }
每个按钮都会重复此代码。如果Java / Scala有C预处理器,我会创建一个宏来生成这个代码,给定按钮名称(请不要在C预处理器的邪恶上讲课)。这段代码显然非常冗长和重复。在Scala中有没有更好的方法可以使用特征?
请举办有关scala.swing的讲座。我在这里寻找一般模式。
答案 0 :(得分:4)
Scala不像java那样关于显式setter和getter方法。而是使用抽象字段来定义公开的接口。这样的事情怎么样:
trait ActionUser {
def setAction(action:Action):Unit
}
trait Container {
val aButton:ActionUser
}
trait ContainerImpl {
val aButton = new JButton with ActionUser
}
针对Container
操作的类只能访问setAction
,而内部方法将其视为JButton。
还有一点需要注意:C使用宏来减少代码重复。 Scala使用特征的多重继承来完成同样的事情。