import org.scalatest._
trait base {
def getvalue(): Int
}
trait Vms extends base {
}
trait Edge extends base {
def getmoq(): Moq
def getvms(): Vms
}
trait Moq extends base {
}
class VmsImpl(val edge: Edge, val value: Int) extends Vms {
def getvalue() = value
}
class EdgeServiceImpl(val vms: Vms, val moq: Moq, val value: Int) extends Edge {
def getvalue() = value
def getmoq() = moq
def getvms() = vms
}
class MoqImpl(val edge: Edge, val value: Int) extends Moq {
def getvalue() = value
}
class Configuration {}
class Factory {
def createVms(config: Configuration, edge: Edge, value: Int = 0): Vms = {
return new VmsImpl(edge, value)
}
def createMoq(config: Configuration, edge: Edge, value: Int = 0): Moq = {
return new MoqImpl(edge, value)
}
def createEdge(config: Configuration): Edge = {
lazy val edge: EdgeServiceImpl = new EdgeServiceImpl(createVms(new Configuration, edge, 1), createMoq(new Configuration, edge, 2), 3)
edge
}
}
object Runtime extends App {
val factory: Factory = new Factory
val edge: Edge = factory.createEdge(new Configuration)
assert(edge.getvalue() == 3)
assert(edge.getmoq().getvalue() == 2)
assert(edge.getvms().getvalue() == 1)
}