반응형
- 생성패턴의 한 종류로
서로 다른 표현이라도 이를 생성할 수 있는 동일한 절차를 제공
아래의 두 가지 종류의 클래스로 나눈다.
- 복잡한 객체를 생성하는 방법을 정의하는 클래스
- 표현하는 방법을 정의하는 클래스로 분리
장점
- 인스턴스를 생성할 때 인자를 선택적으로 가독성 좋게 넘길 수 있다.
- 인자의 순서에 상관이 없고, 불필요한 생성자를 만들지 않는다.
public class Computer {
private int serialNumber;
private String model;
private String vender;
private String cpu;
private int ram;
private int disk;
private String graphicCard;
private Computer(int serialNumber, String model, String vender, String cpu, int ram, int disk, String graphicCard) {
super();
this.serialNumber = serialNumber;
this.model = model;
this.vender = vender;
this.cpu = cpu;
this.ram = ram;
this.disk = disk;
this.graphicCard = graphicCard;
}
@Override
public String toString() {
return "Computer [serialNumber=" + serialNumber + ", model=" + model + ", vender=" + vender + ", cpu=" + cpu
+ ", ram=" + ram + ", disk=" + disk + ", graphicCard=" + graphicCard + "]";
}
public static class ComputerBulider {
private int serialNumber;
private String model;
private String vender;
private String cpu;
private int ram;
private int disk;
private String graphicCard;
public ComputerBulider setSerialNumber(int serialNumber) {
this.serialNumber = serialNumber;
return this;
}
public ComputerBulider setModel(String model) {
this.model = model;
return this;
}
public ComputerBulider setVender(String vender) {
this.vender = vender;
return this;
}
public ComputerBulider setCpu(String cpu) {
this.cpu = cpu;
return this;
}
public ComputerBulider setRam(int ram) {
this.ram = ram;
return this;
}
public ComputerBulider setDisk(int disk) {
this.disk = disk;
return this;
}
public ComputerBulider setGraphicCard(String graphicCard) {
this.graphicCard = graphicCard;
return this;
}
public Computer build() {
Computer computer = new Computer(serialNumber, model, vender, cpu, ram, disk, graphicCard);
return computer;
}
}
}
public class ComputerClient {
public static void main(String[] args) {
Computer computer = new Computer.ComputerBulider()
.setCpu("i9")
.setDisk(256)
.build();
System.out.println(computer);
}
}
반응형
'Java > Design Pattern' 카테고리의 다른 글
옵저버 패턴 Observer (0) | 2023.01.17 |
---|---|
컴포짓 패턴 Composite (0) | 2023.01.16 |
프로토타입 패턴 Prototype (0) | 2023.01.16 |
템플릿 메소드 패턴 (0) | 2023.01.11 |
추상 팩토리 패턴 (0) | 2023.01.11 |