Design Architecture/Design Pattern 예제

빌더(Builder) 패턴 예제

lipnus 2021. 9. 26. 15:17
반응형

 

 

// Director
public class AerospaceEngineer {
    private AirplaneBuilder airplaneBuilder;

    public void setAirplaneBuilder(AirplaneBuilder ab) {
        AirplaneBuilder = ab;
    }

    public Airplane getAirplane() {
        return airplaneBuilder.getAirplane();
    }

    public void constructionAirplne() {
        airplaneBuilder.createNewAirplne();
        airplaneBuilder.buildWings();
        airplaneBuilder.buildPowerplant();
        airplaneBuilder.buildAvionics();
        airplaneBuilder.buildSeats();
    }
}


//Builder(Abstract)
public abstract class AirplaneBuilder {
    protected Airplne airplane;
    protected String customer;
    protected String type;

    public Airplne getAirplne() {
        return airplane;
    }

    public void createAirpalne() {
        airplane = new Airplane(customer, type);
    }

    public abstract void buildWings();
    public abstract void buildPowerplant();
    public abstract void buildAvionices();
    public abstract void buildSeats();
}


//Product
public class Airplane {
    private String type;
    private float wingspan;
    private STring powerplant;
    private int crewSeats;
    private int passengerSeats;
    private String avionics;
    private String customer;

    Airplane(String customer, String type) {
        this.customer = customer;
        this.type = type;
    }

    public void setWinspan(float w) {this.wingspan = w;}
    public void setPowerPlant(String p) {this.powerplant = p;}
    public void setAvionics(String a) {this.avionics = a;}
    public void setNumberSeats(int crewSeat, int passengerSeat) {
        this.crewSeat = crewSeat;
        this.passengerSeat = passengerSeat;
    }
    public String getCustomer() { return customer; }
    public String GetType() { return type; }
} 



//Concreate builder1
public class CropDuster extends AirplaneBuilder {
    CropDuster(String customer) {
        super.customer = customer;
        super.type = "Crop Duster v3.4";
    }

    public void buildWings() {
        airplane.setWinspan(9f);
    }

    public void buildPowerplant() {
        airplane.setPowerPlant("single piston");
    }

    public void buildAvionics() {}

    public void buildSeats() {
        airplane.setNumberSeats(1,1);
    }
}

//Concreate builder2
public class FightJet extends AirplaneBuilder {
    FightJet(String customer) {
        super.customer = customer;
        super.type = "F-35 Lightning II";
    }

    public void buildWings() {
        airplane.setWinspan(35f);
    }

    public void buildPowerplant() {
        airplane.setPowerPlant("dual thrust vectoring");
    }

    public void buildAvionics() {
        airplane.setAvionics("military");
    }

    public void buildSeats() {
        airplane.setNumberSeats(1,0);
    }
}


//Concreate builder3
public class Glider extends AirplaneBuilder {
    Glider(String customer) {
        super.customer = customer;
        super.type = "Glider v9.0";
    }

    public void buildWings() {
        airplane.setWinspan(57.1f);
    }

    public void buildPowerplant() {}

    public void buildAvionics() {}

    public void buildSeats() {
        airplane.setNumberSeats(1,0);
    }
}



//Client
public Class Client {
    public stataic void main(String[] args) {
        AerospaceEngineer aero = new AerospaceEngineer();

        AirplaneBuilder crop = new CropDuster("김우빈");
        AirplaneBuilder figher = new CropDuster("김선호");
        AirplaneBuilder glider = new CropDuster("이병현");

        asro.setAirplaneBuilder(crop);
        aero.constructionAirplne();
        Airplane completeCropDuster = aero.getAirplane();
    }
}
반응형