728x90
반응형
많은 변수를 가진 객체의 생성을 가독성 높게한다.
많은 인자를 가진 객체를 생성을 다른 객체의 도움으로 생성하는 패턴 > 보통 빌더패턴이 이것이다.
package Builder2;
public class Main {
public static void main(String[] args) {
Computer computer = ComputerBuilder
.start()
.setCpu("i7")
.setRam("8g")
.setStorage("128g ssd")
.build();
System.out.println("computer = " + computer.toString());
System.out.println("computer = " + computer);
}
}
package Builder2;
//디렉터
public class Computer { // 복잡한 단계 거처야하는 객체
private String Cpu;
private String ram;
private String storage;
/**
*
* @param cpu 씨피유
* @param ram 램
* @param storage 저장소
*/
public Computer(String cpu, String ram, String storage) {
this.Cpu = cpu;
this.ram = ram;
this.storage = storage;
}
public String getCpu() {
return Cpu;
}
public void setCpu(String cpu) {
Cpu = cpu;
}
public String getRam() {
return ram;
}
public void setRam(String ram) {
this.ram = ram;
}
public String getStorage() {
return storage;
}
public void setStorage(String storage) {
this.storage = storage;
}
@Override // 객체가 가지고 있는 문자열을 반환
public String toString() {
return Cpu +","+ram+","+storage;
}
}
package Builder2;
public class ComputerBuilder {
private Computer computer;
private ComputerBuilder() {
computer = new Computer("default","default","default");
}
public static ComputerBuilder start() {
return new ComputerBuilder(); // ssd는 default가 들어감
}
public ComputerBuilder setCpu(String string) {
computer.setCpu(string);
return this;
}
public ComputerBuilder setRam(String string) {
computer.setRam(string);
return this;
}
public ComputerBuilder setStorage(String storage) {
computer.setStorage(storage);
return this;
}
public Computer build() {
return this.computer;
}
// public ComputerBuilder setStroage(String string) {
// computer.setStorage(string);
// return null;
// }
}
리턴타입이 자기 자신인 이유는 그래야 리턴타입이 맞기 때문이다
ComputerBuilder로 cpu를 설정하고 다시 ComputerBuilder 로 리턴하면
그다음 Ram 을 성정할때 다시 메소드를 쓸수 있게된다, 그러면서 체이닝을 계속 이어서 만들 수 있는 형태가 돼서
결국 Build(); 가 나올때까지 계속 해주면 된다. >> 체이닝 원리 완성
반응형
댓글