Advertisement
Guest User

Untitled

a guest
Apr 2nd, 2014
36
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. // ---------Framework:---------
  2.  
  3. abstract class Engine {
  4.     class Base(val children: Seq[Base])
  5.     abstract def doSomething(base: Base)
  6.    
  7.     final class Spec1(val foo: String, children: Seq[Base]) extends Base(children)
  8.     final class Spec2(val bar: String, children: Seq[Base]) extends Base(children)
  9. }
  10.  
  11. object Engine {
  12.     def runExample(engine: Engine) {
  13.         val spec1 = new engine.Spec1("foo", Seq.empty)
  14.         engine.doSomething(spec1)
  15.         val spec2 = new engine.Spec2("foo", Seq(new Spec1("foo", Seq.empty)))
  16.         engine.doSomething(spec2)
  17.     }
  18. }
  19.  
  20. // ---------Client:---------
  21.  
  22. class ConcreteEngine {
  23.     override class Base(val children: Seq[Base]) {
  24.         val height = if(children.isEmpty()) 0 else children.map{_.height}.max
  25.     }
  26.     override def doSomething(base: Base) {
  27.         println("Node @ " + base.height)
  28.     }
  29. }
  30.  
  31. object Main extends App {
  32.     Engine.run(new ConcreteEngine())
  33. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement