Android 면접 문제 - 디자인 모델 구축 자 모델 Builder 상세 설명 및 코드 demo

빌 더 모드
  • 정의
  • 실현
  • 캐릭터
  • 코드 데모
  • Android 에서 구축 자 모델 의 사례
  • AlertDialog
  • Notification
  • OKHttp
  • 장점
  • 정의.
    또한 건설 자 모델 이 라 고도 부 릅 니 다. 복잡 한 대상 의 생 성과 표 시 를 분리 시 켜 같은 구축 과정 에서 서로 다른 표 시 를 만 들 수 있 습 니 다.
    이 말 을 어떻게 이해 하지?
    예 를 들 어 당신 이 자동 차 를 조립 하려 면 많은 공구 와 부품 이 필요 할 것 입 니 다. 그리고 당신 은 무작정 창고 로 달 려 가 한 방 의 부품 을 마주 하고 있 습 니 다. 당신 은 멍청 하지 않 습 니까? 나 는 어떻게 이 물건 에서 차 를 조립 하 는 데 필요 한 부품 을 찾 아야 합 니까?그리고 지금 조립 모델 이 업그레이드 되 었 습 니 다. 당신 과 도 킹 하 는 오래된 기사 가 있 습 니 다. 당신 은 그 에 게 이 단계 에 어떤 부품 이 필요 한 지 알려 주기 만 하면 다음 단계 에 어떤 부품 이 필요 한 지 알려 주 십시오. 늙 은 기사 가 당신 을 도와 조립 하 러 갑 니 다. 당신 은 창고 안에 얼마나 지저분 한 물건 이 있 는 지 전혀 관심 을 가 질 필요 가 없습니다.이렇게 해서 당신 은 어떤 차 를 조립 하고 싶 습 니까?
    이 비 유 는 그다지 적절 하지 않 을 수도 있 지만 이 치 는 분명 할 것 이다.
    차 라 는 대상 의 생 성 은 매우 복잡 하 다 고 말 해 야 한다. 그것 은 매우 많은 속성 을 가지 고 있다. 만약 에 구조 방법 을 통 해 인 스 턴 스 를 직접 전달 하면 참 을 수 없 을 것 이다.그러나 당신 이 대외 적 으로 공 개 된 창조 자 역할, 즉 위의 오래된 운전 자 를 사용 하고 어떤 속성 치 를 전달 하고 싶 으 면 그것 을 주 십시오. 당신 이 생각 을 다 할 때 까지 마지막 으로 구축 하면 차 가 나 옵 니 다.
    이루어지다
    역할.
    구축 자 모델 에서 두 가지 역할 이 반드시 존재 해 야 한다. 물론 규범 에 따라 네 가지 역할 이 있 을 것 이다. 우 리 는 여기 서 약술 한다.
  • 제품: 즉 최종 적 으로 구축 해 야 할 대상 으로 내부 에 복잡 하거나 대량의 속성
  • 이 포함 되 어 있다.
  • Builder: 진정한 구축 자 대상 은 서로 다른 업무 수요 에 따라 복잡 한 대상 에 대한 서로 다른 디 스 플레이 생 성
  • 을 실현 했다.
    코드 없 는 설명 은 모두 깡패 짓 이 었 고, 이어서 코드 를 통 해 시범 을 보 였 다.
    코드 데모
    지금 [사람] 이라는 대상 이 있 습 니 다. 사람 이 라면 많은 속성 이 있 을 것 입 니 다. 다음 과 같 습 니 다.
    public class Person {
    
        private String age;
        private String sex;
        private String name;
        private String weight;
        private String height;
        private String location;
        private String idCard;
        private String workType;
        private String school;
        private String father;
        private String mother;
        private String favorite;
        private String skill;
    
    
    }
    

    여기 서 예 를 들 어 실제 개발 자가 필요 로 하 는 대상 은 더 많은 속성 이 있 을 수 있 습 니 다. 예 를 들 어 OKHttpClient 대상 입 니 다.만약 에 네가 구조 방법 을 통 해 인삼 을 전달 하 는 형식 이나 setXXX 방법 을 통 해 대상 을 구성 하면 인성 이 없 는 것 이 분명 하 다. 프로그램 원숭이 에 대해 너무 잔인 하고 글 씨 를 쓰 는 것 은 말 할 필요 도 없 이 매우 추 하 다.이 럴 때 는 빌 더 모드 를 사용 해 야 합 니 다.
    우리 가 해 야 할 일 은 내부 클래스 Builder 를 추가 하 는 것 입 니 다. 물론 당신 도 하나의 클래스 를 단독으로 쓸 수 있 습 니 다.
  • 내부 에서 같은 속성 을 정의 하고 해당 하 는 setXX 방법 을 추가 하지만 각 setXXX 방법 은 Builder 대상 으로 돌아 가 체인 프로 그래 밍
  • 을 실현 하 는 데 편리 하 다 는 것 을 명심 하 세 요.
  • 인삼 이 없 는 구조 방법 을 제공 합 니 다. 그 중에서 일부 속성의 기본 값
  • 을 지정 할 수 있 습 니 다.
  • Person 대상 을 실례 화하 고 되 돌려 주 는 build 방법 을 대외 적 으로 공개 합 니 다
  •     public static final class Builder{
    
            private String age;
            private String sex;
            private String name;
            private String weight;
            private String height;
            private String location;
            private String idCard;
            private String workType;
            private String school;
            private String father;
            private String mother;
            private String favorite;
            private String skill;
    
            public Builder() {
                //              
                age = "15";
            }
    
            public Builder setAge(String age) {
                this.age = age;
                return this;
            }
    
            public Builder setSex(String sex) {
                this.sex = sex;
                return this;
            }
    
            public Builder setName(String name) {
                this.name = name;
                return this;
            }
    
            public Builder setWeight(String weight) {
                this.weight = weight;
                return this;
            }
    
            public Builder setHeight(String height) {
                this.height = height;
                return this;
            }
    
            public Builder setLocation(String location) {
                this.location = location;
                return this;
            }
    
            public Builder setIdCard(String idCard) {
                this.idCard = idCard;
                return this;
            }
    
            public Builder setWorkType(String workType) {
                this.workType = workType;
                return this;
            }
    
            public Builder setSchool(String school) {
                this.school = school;
                return this;
            }
    
            public Builder setFather(String father) {
                this.father = father;
                return this;
            }
    
            public Builder setMother(String mother) {
                this.mother = mother;
                return this;
            }
    
            public Builder setFavorite(String favorite) {
                this.favorite = favorite;
                return this;
            }
    
            public Builder setSkill(String skill) {
                this.skill = skill;
                return this;
            }
    
            public Person build(){
                return new Person(this);
            }
        }
    

    다음은 Person 대상 에 구조 방법 을 추가 하고 Builder 대상 을 받 은 다음 내부 속성 에 값 을 부여 합 니 다.
        public Person() {
            this(new Builder());
        }
    
        public Person(Builder builder) {
            age = builder.age;
            sex = builder.sex;
            name = builder.name;
            weight = builder.weight;
            height = builder.height;
            location = builder.location;
            idCard = builder.idCard;
            workType = builder.workType;
            school = builder.school;
            father = builder.father;
            mother = builder.mother;
            favorite = builder.favorite;
            skill = builder.skill;
        }
    

    마지막 으로 사용:
    Person person = new Person
            .Builder()
            .setAge("15")
            .setName("Jon")
            .setSex("1")
            .build();
    

    구조 적 방법 에 대한 참조 와 열 을 전달 하 는 set 방법 에 비해 이런 표기 법 은 매우 간결 하지 않 습 니까? 당신 이 전달 하고 싶 은 매개 변 수 는. Builder () 뒤에 추가 하면 됩 니 다.
    Android 에서 빌 더 모드 의 사례
    AlertDialog
    AlertDialog dialog = new AlertDialog
                  .Builder(this)
                  .setIcon(R.mipmap.ic_launcher)
                  .setTitle("  ")
                  .setPositiveButton()
                  .setNegativeButton()
                  .create();
    

    Notification
    Notification notification = new Notification
                      .Builder(this)
                      .setContentTitle("  ")
                      .setContentText("        ")
                      .setSmallIcon(R.mipmap.ic_launcher)
                      .build();
    

    OKHttp
    OkHttpClient client = new OkHttpClient
            .Builder()
            .readTimeout(5000, TimeUnit.MILLISECONDS)
            .writeTimeout(5000,TimeUnit.MILLISECONDS)
            .cache(new Cache(new File("cache"), 1024 * 1024 * 10))
            .build();
    

    장점.
  • 쓰기 가 간결 하고 코드 가 아름답다
  • 개발 자 는 대상 내부 로 구 성 된 세부 사항 을 알 필요 없 이 자신 이 어떤 대상 을 필요 로 하 는 지 에 만 관심 을 가진다
  • 좋은 웹페이지 즐겨찾기