23가지 디자인 모드 - 빌더 모드(Builder)

2982 단어

역할: 복잡한 대상을 구축하는 데 도움을 준다.(예: 사용자 정의view)


Builder 모드라고도 하는데 안 썼을 수도 있지만 다 봤을 거예요.우선 매우 복잡한 대상이다. 비록 구조 방법은 간단하지만 그것의 사용은 매우 유연하고 많은 설정 가능한 항목이 있다.이럴 때 우리는 new를 하나 보고 원본 하나를 보고 설정하는 데 분명히 많은 시간이 필요하다.우리가 설정할 수 있는 항목만 주목할 수 있는 방법이 없을까요?네, 구축자.우리가 복잡한 대상을 만드는 것을 돕다.

세 가지 방법으로 구축:


Product 클래스에 대한 구성
public class Product {
    private int id;
    private String name;
    private int type;
    private float price;
}
  • 구조기 중재
  • public class Product {
        private int id;
        private String name;
        private int type;
        private float price;
    
        public Product(int id) {
            this.id = id;
        }
    。。。
    
        public Product(int id, String name) {
            this.id = id;
            this.name = name;
        }
    。。。
    
        public Product(int id, String name, int type) {
            this.id = id;
            this.name = name;
            this.type = type;
        }
    。。。
    
        public Product(int id, String name, int type, float price) {
            this.id = id;
            this.name = name;
            this.type = type;
            this.price = price;
        }
    }
    

    이론적으로 이런 구축 방식은 xxx의 매우 많은 구조 방법을 생성해야 한다
  • javaBeans 방식
  • public class Product {
        private int id;
        private String name;
        private int type;
        private float price;
    
        public void setId(int id) {
            this.id = id;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public void setType(int type) {
            this.type = type;
        }
    
        public void setPrice(float price) {
            this.price = price;
        }
    }
    

    비교적 간단하지만 구조 과정이 몇 개의 호출로 나뉘었기 때문에 구조 과정에서 자바빈스는 일치하지 않는 상태에 있을 수 있고 클래스는 구조기 파라미터의 유효성을 검사함으로써 일치성을 확보할 수 없다.
  • builder 모드
  •  public class Product {
        private int id;
        private String name;
        private int type;
        private float price;
    
        public Product(Builder builder) {
            this.id = builder.id;
            this.name = builder.name;
            this.type = builder.type;
            this.price = builder.price;
        }
    
        public static class Builder {
            private int id;
            private String name;
            private int type;
            private float price;
    
            public Builder id(int id) {
                this.id = id;
                return this;
            }
    
            public Builder name(String name) {
                this.name = name;
                return this;
            }
    
            public Builder type(int type) {
                this.type = type;
                return this;
            }
    
            public Builder price(float price) {
                this.price = price;
                return this;
            }
    
            public Product build() {
                return new Product(this);
            }
        }
    }
    
     Product p = new Product.Builder()
                    .id(10)
                    .name("phone")
                    .price(100)
                    .type(1)
                    .build();
    

    먼저 어떤 방식을 통해 구조 대상에 필요한 모든 매개 변수를 얻어낸 다음에 이 매개 변수를 통해 이 대상을 한꺼번에 구성한다

    좋은 웹페이지 즐겨찾기