자바 로 건설 자 모드 구현

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 도 모두 이 디자인 모델 을 사용 했다.

좋은 웹페이지 즐겨찾기