Scala模型 - 视图 - 演示者,特征

时间:2010-05-26 16:48:09

标签: scala macros mvp

我是Martin Fowler(已弃用)模型 - 视图 - 演示者模式的粉丝。我正在编写一个包含几个按钮类的Scala视图类。我想包括设置按钮的动作属性的方法,由演示者调用。典型的代码片段如下所示:

private val aButton = new JButton
def setAButtonAction(action: Action): Unit = { aButton.setAction(action) }

每个按钮都会重复此代码。如果Java / Scala有C预处理器,我会创建一个宏来生成这个代码,给定按钮名称(请不要在C预处​​理器的邪恶上讲课)。这段代码显然非常冗长和重复。在Scala中有没有更好的方法可以使用特征?

请举办有关scala.swing的讲座。我在这里寻找一般模式。

1 个答案:

答案 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使用特征的多重继承来完成同样的事情。