자바 로 건설 자 모드 구현
8884 단어 JAVA 디자인 모드
클 라 이언 트 프로그램 과 공장 류 가 매개 변 수 를 전달 하 는 과정 에서 오류 가 발생 하기 쉽다. 대부분 상황 에서 매개 변수 유형 이 같 고 클 라 이언 트 프로그램 에 있어 유지 하기 어렵 기 때문이다.
일부 변 수 는 선택 할 수 있 지만 공장 모드 에서 모든 변 수 는 강제 전송 되 어야 합 니 다. 그 중에서 선택 할 수 있 는 매개 변 수 는 할당
NULL
입 니 다. 대상 이 가 볍 지 않 고 만 들 때 상대 적 으로 복잡 하 다 면 이런 복잡성 도 공장 모델 이 혼 란 스 러 운 부분 이 될 것 이다.
대량의 속성 문제 에 대해 우 리 는 필요 한 매개 변 수 를 가 진 구조 함수 와
getter
/ setter
방법 을 제공 하여 해결 할 수 있 을 것 처럼 보이 지만 이것 은 대상 상태의 불일치 성 을 가 져 왔 다. 모든 속성 이 명확 하 게 설정 되 지 않 는 한.건설 자 모델 은 점진 적 으로 대상 을 만 들 고 최종 적 으로 이 대상 으로 돌아 가 는 방식 으로 상술 한 문 제 를 교묘 하 게 해결 했다.건설 자 모델 의 실현 을 살 펴 보 자.우선 정적 내부 클래스
Builder
를 만 들 고 모든 외부 클래스 의 인 자 를 이 클래스 에 복사 해 야 합 니 다.이 내부 클래스 를 명명 할 때 가능 한 한 외부 클래스 뒤에 Builder
글 자 를 붙 이 는 것 을 권장 합 니 다. 예 를 들 어 외부 클래스 는 Computer
이 고 이 내부 클래스 는 ComputerBuilder
입 니 다. 이 내부 건설 자 류 는 하나의
public
유형의 구조 함 수 를 가지 고 이 구조 함 수 는 필요 한 속성 값 을 매개 변수 로 한다. 건설 자 클래스 는 값 을 부여 할 수 있 는 매개 변 수 를 선택 하 는 방법 을 가지 고 있 으 며, 방법의 반환 값 은 이 클래스 자체 입 니 다.
마지막 으로 건설 자 클래스 는
build()
와 유사 한 방법 을 제공 하고 외부 클래스 의 실례 를 되 돌려 야 한다.따라서 외부 클래스 는 Builder
의 인 스 턴 스 대상 을 매개 변수 로 하 는 개인 구조 함수 가 필요 합 니 다.이 함수 에서 외부 클래스 의 속성 변 수 를 할당 합 니 다.우 리 는 하나의 예 로 깊이 이해 해 보 자. public class Computer {
//required parameters
private String HDD;
private String RAM;
//optional parameters
private boolean isGraphicsCardEnabled;
private boolean isBluetoothEnabled;
public String getHDD() {
return HDD;
}
public String getRAM() {
return RAM;
}
public boolean isGraphicsCardEnabled() {
return isGraphicsCardEnabled;
}
public boolean isBluetoothEnabled() {
return isBluetoothEnabled;
}
private Computer(ComputerBuilder builder) {
this.HDD=builder.HDD;
this.RAM=builder.RAM;
this.isGraphicsCardEnabled=builder.isGraphicsCardEnabled;
this.isBluetoothEnabled=builder.isBluetoothEnabled;
}
//Builder Class
public static class ComputerBuilder{
// required parameters
private String HDD;
private String RAM;
// optional parameters
private boolean isGraphicsCardEnabled;
private boolean isBluetoothEnabled;
public ComputerBuilder(String hdd, String ram){
this.HDD=hdd;
this.RAM=ram;
}
public ComputerBuilder setGraphicsCardEnabled(boolean isGraphicsCardEnabled) {
this.isGraphicsCardEnabled = isGraphicsCardEnabled;
return this;
}
public ComputerBuilder setBluetoothEnabled(boolean isBluetoothEnabled) {
this.isBluetoothEnabled = isBluetoothEnabled;
return this;
}
public Computer build(){
return new Computer(this);
}
}
}
이때
Computer
류 는 getter
방법 만 있 고 공유 하 는 구조 함수 가 없 으 면 Computer
인 스 턴 스 대상 을 얻 는 방법 은 ComputerBuilder
류 를 통 해 만 이 루어 질 수 있 습 니 다.건설 자 모델 의 사용 도 매우 간단 하 다. Computer comp = new Computer.ComputerBuilder(
"500 GB", "2 GB").setBluetoothEnabled(true)
.setGraphicsCardEnabled(true).build();
JDK
에서 예 를 들 어 StringBuilder
, StringBuffer,Grpc Response、Request
도 모두 이 디자인 모델 을 사용 했다.