Builder 빌더 모드 일반 템플릿

3043 단어
이 글을 볼 수 있는 독자들은 Builder 빌더 모델을 많든 적든 알아야 한다고 생각합니다.빌더 모드가 나타나기 전에 빌드 객체에 다음과 같은 두 가지 문제가 발생합니다.
4
  • 속성이 너무 많은 상황에서 구조 함수에서 초기화되어야 하는 모든 매개 변수를 한꺼번에 전달하고 수요에 따라override 여러 개의 서로 다른 매개 변수를 조합한 구조 함수를 전달할 수 있다.좀 귀찮은데.

  • 4
  • 만약에 무참한 빈 대상을 만들면setter 방법을 통해 모든 속성 값에 값을 부여하면 대상이 일치하지 않는 문제가 매우 크다.즉setter 방법은 언제든지 대상의 속성에 다시 값을 부여할 수 있기 때문에 프로그램 상하문 대상의 속성이 일치하지 않는 상황을 초래할 수 있다. 이것은 서열화나 다중 라인의 상황에서 대상이 일치하지 않아 버그 위험이 발생할 수 있다

  • Builder 빌더 모드를 사용하면 위의 두 가지 문제를 잘 해결할 수 있습니다.됐어, 잔말 말고 바로 코드로 가자.다음은 하나의 Config 클래스를 통해 구축자 모델을 실현하고 다른 상황은 이것을 참고하여 해당하는 수정을 할 수 있습니다.사고의 방향이 일치하다.
    public class Config {
        private String protocol;
        private String ip;
        private String port;
    
        public String getProtocol() {
            return protocol;
        }
    
        public String getIp() {
            return ip;
        }
    
        public String getPort() {
            return port;
        }
    
        @Override
        public String toString() {
            return "Config{" +
                    "protocol='" + protocol + '\'' +
                    ", ip='" + ip + '\'' +
                    ", port='" + port + '\'' +
                    '}';
        }
    
        // Builder 
        public static class Builder {
            private String protocol = "http://";
            private String ip = "127.0.0.1";
            private String port = "80";
    
            // Builder 
            public Builder setProtocol(String protocol) {
                this.protocol = protocol;
                return this;
            }
    
            public Builder setIp(String ip) {
                this.ip = ip;
                return this;
            }
    
            public Builder setPort(String port) {
                this.port = port;
                return this;
            }
    
            // aplly , , 
            public void apply2Super(Config config) {
                config.protocol = this.protocol;
                config.ip = this.ip;
                config.port = this.port;
            }
    
            // build , , apply , 。
            public Config build(){
                Config config = new Config();
                apply2Super(config);
                return config;
            }
    
        }
    }
    

    호출 방법:
            // 
            Config config1 = new Config.Builder().build();
    
            System.out.println(config1);
    
            // 
            Config config = new Config.Builder()
                    .setProtocol("https://")
                    .setIp("192.168.0.1.")
                    .setPort("8080")
                    .build();
    
            System.out.println(config);
    

    총결산
    1. 구성이 필요한 클래스에 Builder 정적 클래스를 추가하고 기본값을 부여합니다. 2. 모든 속성에 자신의 Builder 대상을 되돌려주는 방법을 만듭니다. 3. 새로운 aplly 방법을 만듭니다. 부류 인용을 전송하고 부치 구축의 매개 변수 4.build 방법을 새로 만듭니다. 부류 대상을 만듭니다. 이 빈 대상에 구축된 매개 변수 값을 전달하고 이 구축 대상을 되돌려주면 됩니다.
    P.S:앤리에게 책 한 권을 드릴게요.'큰소리 디자인 모델'의 작자는 정걸이의 그거예요.이 책은 모든 디자인 모델을 통속적이고 알기 쉽게 설명했는데 내가 본 모든 디자인 모델 중에서 가장 이해하기 쉽고 가장 깔끔하다.저는 지금 책에서 말한 것과 제 자신의 이해에 따라 모든 디자인 모델을 실현하고 있습니다.github 주소:https://github.com/longzhiwuing/GOFDemos벽돌과 스타를 환영합니다.

    좋은 웹페이지 즐겨찾기