Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import groovy.transform.*
- @ToString
- class Vehicle {
- String brand
- String model
- Integer wheels
- }
- class Car extends Vehicle {}
- class Bike extends Vehicle {}
- // FactoryBuilderSupport
- class VehicleBuilder extends BuilderSupport {
- @Override protected Object createNode(Object name, Map attributes = [:]) {
- return createNode(name, attributes, null)
- }
- @Override protected Object createNode(Object name, Map attributes = [:], Object value) {
- switch(name) {
- case 'car': return new Car()
- case 'bike': return new Bike()
- case 'wheels':
- assert value instanceof Integer
- return ['wheels', value]
- case 'brand':
- assert value instanceof String
- return ['brand', value]
- case 'model':
- assert value instanceof String
- return ['model', value]
- default:
- throw new IllegalStateException("What type of vehicle are you trying to build ? $name ?")
- }
- }
- @Override protected void setParent(Object parent, Object child) {
- assert child instanceof List
- assert child.size() == 2
- switch(child.first()) {
- case 'wheels':
- parent.wheels = child.last()
- break
- case 'brand':
- parent.brand = child.last()
- break
- case 'model':
- parent.model = child.last()
- break
- }
- }
- static main(def args) {
- println VehicleBuilder.newInstance().car {
- wheels 4
- brand 'ferrari'
- model 'F450'
- }
- }
- }
- VehicleBuilder.main(null)
- import groovy.transform.*
- @ToString
- class Vehicle {
- String brand
- String model
- Integer wheels
- }
- class Car extends Vehicle {}
- class Bike extends Vehicle {}
- // FactoryBuilderSupport
- class VehicleBuilder extends BuilderSupport {
- @Override protected Object createNode(Object name, Map attributes = [:]) {
- return createNode(name, attributes, null)
- }
- @Override protected Object createNode(Object name, Map attributes = [:], Object value) {
- switch(name) {
- case 'car': return new Car()
- case 'bike': return new Bike()
- case 'wheels':
- assert value instanceof Integer
- return ['wheels', value]
- case 'brand':
- assert value instanceof String
- return ['brand', value]
- case 'model':
- assert value instanceof String
- return ['model', value]
- default:
- throw new IllegalStateException("What type of vehicle are you trying to build ? $name ?")
- }
- }
- @Override protected void setParent(Object parent, Object child) {
- assert child instanceof List
- assert child.size() == 2
- switch(child.first()) {
- case 'wheels':
- parent.wheels = child.last()
- break
- case 'brand':
- parent.brand = child.last()
- break
- case 'model':
- parent.model = child.last()
- break
- }
- }
- static main(def args) {
- println VehicleBuilder.newInstance().car {
- wheels 4
- brand 'ferrari'
- model 'F450'
- }
- }
- }
- VehicleBuilder.main(null)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement