Advertisement
Guest User

Untitled

a guest
May 31st, 2017
91
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.39 KB | None | 0 0
  1. import groovy.transform.*
  2.  
  3. @ToString
  4. class Vehicle {
  5. String brand
  6. String model
  7. Integer wheels
  8. }
  9. class Car extends Vehicle {}
  10. class Bike extends Vehicle {}
  11.  
  12. // FactoryBuilderSupport
  13. class VehicleBuilder extends BuilderSupport {
  14.  
  15. @Override protected Object createNode(Object name, Map attributes = [:]) {
  16. return createNode(name, attributes, null)
  17. }
  18.  
  19. @Override protected Object createNode(Object name, Map attributes = [:], Object value) {
  20. switch(name) {
  21. case 'car': return new Car()
  22. case 'bike': return new Bike()
  23.  
  24. case 'wheels':
  25. assert value instanceof Integer
  26. return ['wheels', value]
  27.  
  28. case 'brand':
  29. assert value instanceof String
  30. return ['brand', value]
  31.  
  32. case 'model':
  33. assert value instanceof String
  34. return ['model', value]
  35.  
  36. default:
  37. throw new IllegalStateException("What type of vehicle are you trying to build ? $name ?")
  38. }
  39. }
  40.  
  41. @Override protected void setParent(Object parent, Object child) {
  42. assert child instanceof List
  43. assert child.size() == 2
  44.  
  45. switch(child.first()) {
  46. case 'wheels':
  47. parent.wheels = child.last()
  48. break
  49. case 'brand':
  50. parent.brand = child.last()
  51. break
  52. case 'model':
  53. parent.model = child.last()
  54. break
  55. }
  56. }
  57.  
  58. static main(def args) {
  59. println VehicleBuilder.newInstance().car {
  60. wheels 4
  61. brand 'ferrari'
  62. model 'F450'
  63. }
  64. }
  65. }
  66.  
  67. VehicleBuilder.main(null)
  68.  
  69. import groovy.transform.*
  70.  
  71. @ToString
  72. class Vehicle {
  73. String brand
  74. String model
  75. Integer wheels
  76. }
  77. class Car extends Vehicle {}
  78. class Bike extends Vehicle {}
  79.  
  80. // FactoryBuilderSupport
  81. class VehicleBuilder extends BuilderSupport {
  82.  
  83. @Override protected Object createNode(Object name, Map attributes = [:]) {
  84. return createNode(name, attributes, null)
  85. }
  86.  
  87. @Override protected Object createNode(Object name, Map attributes = [:], Object value) {
  88. switch(name) {
  89. case 'car': return new Car()
  90. case 'bike': return new Bike()
  91.  
  92. case 'wheels':
  93. assert value instanceof Integer
  94. return ['wheels', value]
  95.  
  96. case 'brand':
  97. assert value instanceof String
  98. return ['brand', value]
  99.  
  100. case 'model':
  101. assert value instanceof String
  102. return ['model', value]
  103.  
  104. default:
  105. throw new IllegalStateException("What type of vehicle are you trying to build ? $name ?")
  106. }
  107. }
  108.  
  109. @Override protected void setParent(Object parent, Object child) {
  110. assert child instanceof List
  111. assert child.size() == 2
  112.  
  113. switch(child.first()) {
  114. case 'wheels':
  115. parent.wheels = child.last()
  116. break
  117. case 'brand':
  118. parent.brand = child.last()
  119. break
  120. case 'model':
  121. parent.model = child.last()
  122. break
  123. }
  124. }
  125.  
  126. static main(def args) {
  127. println VehicleBuilder.newInstance().car {
  128. wheels 4
  129. brand 'ferrari'
  130. model 'F450'
  131. }
  132. }
  133. }
  134.  
  135. VehicleBuilder.main(null)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement