728x90
Overview
빌더 패턴은 공장에서 만드는 것보다 쉽습니다.
미리 디자인북을 가져오세요.
모든 비행기는 같은 영역으로 나눌 수 있습니다.
Wings, PowerPlant, Avionics, Seats 등
구성 요소는 평면과 다르지만 사이트는 동일합니다.
비행기가 공장에 들어오면 디자인에 따라 다른 붐이 들어옵니다.
다른 부품들로 구성되어 최종적으로 조립과정을 거쳐 완성됩니다.
장점
1. 필요한 데이터만 설정할 수 있습니다.
2. 유연성을 확보할 수 있다.
3. 가독성을 높일 수 있습니다.
4. 불변성을 확보할 수 있다.
Structure

Code Example
package com.example.design.pattern;
class AirplaneProduct {
private String type;
private float wingspan;
private String powerplant;
private int crewSeats;
private int passengerSeats;
private String avionics;
private String customer;
AirplaneProduct(String customer, String type) {
this.customer = customer;
this.type = type;
}
public void setWingspan(float wingspan) {
this.wingspan = wingspan;
}
public void setPowerplant(String powerplant) {
this.powerplant = powerplant;
}
public void setAvionics(String avionics) {
this.avionics = avionics;
}
public void setNumberSeats(int crewSeats, int passengerSeats) {
this.crewSeats = crewSeats;
this.passengerSeats = passengerSeats;
}
public String getCustomer() {
return customer;
}
public String getType() {
return type;
}
}
abstract class AirplaneBuilder {
protected AirplaneProduct airplane;
protected String customer;
protected String type;
public AirplaneProduct getAirplane() {
return airplane;
}
public void createNewAirplane() {
airplane = new AirplaneProduct(customer, type);
}
public abstract void buildWings();
public abstract void buildPowerplant();
public abstract void buildAvionics();
public abstract void buildSeats();
}
class CropDuster extends AirplaneBuilder {
CropDuster(String customer) {
super.customer = customer;
super.type = "Crop Duster v3.4";
}
public void buildWings() {
airplane.setWingspan(9f);
}
public void buildPowerplant() {
airplane.setPowerplant("single piston");
}
public void buildAvionics() {
}
public void buildSeats() {
airplane.setNumberSeats(1, 1);
}
}
class FighterJet extends AirplaneBuilder {
FighterJet(String customer) {
super.customer = customer;
super.type = "F-35 Lightning II";
}
public void buildWings() {
airplane.setWingspan(35.0f);
}
public void buildPowerplant() {
airplane.setPowerplant("dual thrust vectoring");
}
public void buildAvionics() {
airplane.setAvionics("military");
}
public void buildSeats() {
airplane.setNumberSeats(1, 0);
}
}
class AerospaceEngineerDirector {
private AirplaneBuilder airplaneBuilder;
public void setAirplaneBuilder(AirplaneBuilder ab) {
airplaneBuilder = ab;
}
public AirplaneProduct getAirplane() {
return airplaneBuilder.getAirplane();
}
public void constructAirplane() {
airplaneBuilder.createNewAirplane();
airplaneBuilder.buildWings();
airplaneBuilder.buildPowerplant();
airplaneBuilder.buildAvionics();
airplaneBuilder.buildSeats();
}
}
public class MyBuilder {
public static void main(String[] args) {
AerospaceEngineerDirector aero = new AerospaceEngineerDirector();
// instantiate each concrete builder (take orders)
AirplaneBuilder crop = new CropDuster("Farmer Joe");
AirplaneBuilder fighter = new FighterJet("The Navy");
aero.setAirplaneBuilder(crop);
aero.constructAirplane();
AirplaneProduct completedCropDuster = aero.getAirplane();
System.out.println(completedCropDuster.getType() + " is completed and ready for delivery to "
+ completedCropDuster.getCustomer());
}
}
Console Result
Crop Duster v3.4 is completed and ready for delivery to Farmer Joe
Conclusion
Builder pattern is provided as a lombok plugin, so it is easy to use.
Import lombok.builder;
...
@Builder (BuilderMethodName = "Newbuilder", setterPrefix = "set")
Public Class Node IMPLEETS Serializable {
...
Node.newbuilder (). Build ();
...
728x90
'Java Design Pattern' 카테고리의 다른 글
[ENG][디자인패턴]Singleton 패턴 이론과 설명 (0) | 2022.06.01 |
---|---|
[ENG][디자인패턴]Observer 패턴 이론과 설명 (0) | 2022.05.31 |
[ENG][디자인패턴]MVC 패턴 이론과 설명 (0) | 2022.05.30 |
[ENG][디자인패턴]Mediator 패턴 이론과 설명 (0) | 2022.05.27 |
[ENG][디자인패턴]Iterator 패턴 이론과 설명 (0) | 2022.05.26 |
[ENG][디자인패턴]Factory Method 패턴 이론과 설명 (0) | 2022.05.26 |
[ENG][디자인패턴]Decorator 패턴 이론과 설명 (0) | 2022.05.25 |
[ENG][디자인패턴]Bridge 패턴 이론과 설명 (0) | 2022.05.24 |