반응형
// 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();
}
}
반응형
'Design Architecture > Design Pattern 예제' 카테고리의 다른 글
Composite 패턴 예제 (0) | 2021.09.28 |
---|---|
Decorator 예제 (0) | 2021.09.28 |
Template Method 예제 (0) | 2021.09.28 |
추상 팩토리(Abstract Factory)패턴 예제 (0) | 2021.09.26 |
팩토리 메소드(Factory Method) 패턴 예제 (0) | 2021.09.26 |