如何设计一种在Scala中提供实现的方法

时间:2017-11-23 23:59:29

标签: scala design-patterns

我正在使用scala设计一个框架。该框架将具有3个特征:A,B和C.为了使用它,开发人员将扩展这些特征并提供实现。然后,他将调用一个将使用实现的execute()函数。

问题是:我不会将任何实例传递给execute函数。该函数应该使用在需要时提供的实现。我不知道该怎么做。

我的第一个想法是创建一个类(将包含该函数),它将接收参数3工厂方法来创建这些类的实例。代码将是这样的:

trait Abs{def f():Int}

case class Concr extends Abs{def f():Int = 8}    

case class Manager[A <: Abs](val factory: () => A){def exec():Int = {factory().f()}}

Manager[Concr]({() => Concr()}).exec() //It evaluates 8

这个解决方案的问题是它很脏,因为在管理器中,每次你想要创建一个实例时我都要引用工厂,我试图找到一个更好的方法。

1 个答案:

答案 0 :(得分:0)

  

它很脏,因为在经理中,每次要创建实例时都必须引用工厂

为什么这是一个问题?你必须写factory() 完全,如果你以某种方式神奇地引用它,你可以写Concr()。这使得代码更清晰。

您可以使名称更清晰(例如AmakeA而不是factory)和/或使用按名称参数(写factory: => A并将其作为公正访问身体factory