Entwurfsmuster: Builder in Java (Erbauer)

Zum Verständnis:

Erbauermuster in Java zur Erzeugung von Objekten mit optionalen Parametern

Product mit integriertem ConcreteBuilder

/**
 * Product.
 *
 * @author Karl Lorey
 *
 */
public class Car {
    public static enum FuelType {
        GASOLINE, DIESEL
    }

    // Muss
    private int speed;
    private int power;
    private FuelType fuelType;

    // Kann
    private boolean withCdAudio;
    private boolean withSunroof;
    private boolean withAirConditioning;

    /**
     * ConcreteBuilder nach Effective Java. In diesem Fall ohne abstrakten
     * Builder, da durch den Builder nur die Standardparameter gesetzt werden
     * sollen.
     *
     * @author Karl Lorey
     *
     */
    public static class Builder {
        // Muss
        private int speed;
        private int power;
        private FuelType fuelType;

        // Kann mit Standardwerten
        private boolean withCdAudio = true;
        private boolean withSunroof = false;
        private boolean withAirConditioning = true;

        /**
         * Benötigt die Parameter, die gesetzt werden müssen.
         *
         * @param speed
         *            Höchstgeschwindigkeit.
         * @param power
         *            Leistung.
         * @param ft
         *            Kraftstoff-Art.
         */
        public Builder(int speed, int power, FuelType ft) {
            this.speed = speed;
            this.power = power;
            this.fuelType = ft;
        }

        public Builder withCdAudio(boolean integrated) {
            this.withCdAudio = integrated;
            return this;
        }

        public Builder withSunroof(boolean integrated) {
            this.withSunroof = integrated;
            return this;
        }

        public Builder withAirConditioning(boolean integrated) {
            this.withAirConditioning = integrated;
            return this;
        }

        /**
         * Erstellt das eigentliche Auto.
         *
         * @return Das erstellte Auto.
         */
        public Car build() {
            return new Car(this);
        }
    }

    public Car(Builder builder) {
        this.speed = builder.speed;
        this.power = builder.power;
        this.fuelType = builder.fuelType;
        this.withCdAudio = builder.withCdAudio;
        this.withSunroof = builder.withSunroof;
        this.withAirConditioning = builder.withAirConditioning;
    }
}

Director

/**
 * Director. Nutzt den Builder zur Erstellung eines Autos mit und ohne
 * Standardparameter.
 *
 * @author Karl Lorey
 *
 */
public class Director {
    /**
     * Erstellung eines Autos mit Standardparametern.
     *
     * @return Standardauto
     */
    public Car createUsualCar() {
        return new Car.Builder(176, 95, Car.FuelType.DIESEL).build();
    }

    /**
     * Erstellung eines Autos mit geänderten Parametern.
     *
     * @return BMW M3
     */
    public Car createBmwM3() {
        return new Car.Builder(249, 420, Car.FuelType.GASOLINE)
                .withAirConditioning(true).withCdAudio(true).withSunroof(true)
                .build();
    }
}

Schreibe den ersten Kommentar

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.