디자인 패턴 (13) - 빌더 모드 (빌더)

빌더 (빌더) 디자인 패턴 (라고 빌더 디자인 모드) :

클래스의 내부 데이터 (데이터 클래스, 같은 구성, VO, PO, 엔티티를 ... 유지를위한 일반적으로 책임) 너무 복잡해서 시간이되면, 당신은이 클래스의 내부 구조를 이해하기 위해 생성 될 필요가있다, 이러한 일이있다 조립 및 다른 조직 사물의 혼란의 큰 더미가,이 시간을 학습의 비용을 증가하고 매우 혼란을 얼마나입니다, 이번에는 원의 종류 아 만들 때 만드는 방법, 그것의이 클래스에 대한 데이터를 관리 할 수있는 다른 방법을 원하는 것을에 그것에 단계적으로, 그리고 내가 잘에서 설정도 원하는 것은,이 빌더, 빌더 모델을 구축 할 수 있습니다 응용 프로그램 시나리오 모드와 클래스, 아 말하고 나에게 코드의 좋은 가독성을하지 않습니다 분리를 나타냅니다.

예를 들어 봐 :

public class Student {

    private int id;
    private String name;
    private String passwd;
    private String sex;
    private String address;

    // 构造器尽量缩小范围
    private Student() {
    }

    // 构造器尽量缩小范围
    private Student(Student origin) {
        // 拷贝一份
         this.id = origin.id;
        this.name = origin.name;
        this.passwd = origin.passwd;
        this.sex = origin.sex;
        this.address = origin.address;
    }

    public int getId() {
        return id;
    }

    public String getName() {
        return name;
    }

    public String getPasswd() {
        return passwd;
    }

    public String getSex() {
        return sex;
    }

    public String getAddress() {
        return address;
    }

    /**
     * Student的创建完全依靠Student.Builder,使用一种方法链的方式来创建
     *
     */
    public static class Builder {

        private Student target;

        public Builder() {
            target = new Student();
        }

        public Builder address(int id) {
            target.id = id;
            return this;
        }

        public Builder name(String name) {
            target.name = name;
            return this;
        }

        public Builder password(String passwd) {
            target.passwd = passwd;
            return this;
        }

        public Builder sex(String sex) {
            target.sex = sex;
            return this;
        }

        public Builder address(String address) {
            target.address = address;
            return this;
        }

        public Student build() {
            return new Student(target);
        }
        
    }

}

직접 새로운 의견 학생, 생성자는 그것을 가능한 한 작게, 이는 그들의 Student.Builder 의해 구성되는 액세스 범위를 만들기 위해 처리 된하지 체인의 한 종류 Student.Builder의 클래스 세트의 메소드를 구비 방법은 값을 설정 한 다음 최종 빌드 () 메소드가 반환의 경우 학생 개체를 다음과 같이 지금 당신은, Student 객체를 만들려면 :

... 학생의 = 새 Student.Builder () 이름 ( "CC") 암호 ( "QWERTY") 섹스 ( "M") .address ( "은하 초 회전 팔") .build ();

당신이 생성자 모드를 사용하지 않는 경우 (정상 사용 조건에서) 비교 :

/**
 * 学生实体
 */
public class Student {

    private int id;
    private String name;
    private String passwd;
    private String sex;
    private String address;

    public Student() {
    }

    public Student(String name, String passwd, String sex, String address) {
        super();
        this.name = name;
        this.passwd = passwd;
        this.sex = sex;
        this.address = address;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getPasswd() {
        return passwd;
    }

    public void setPasswd(String passwd) {
        this.passwd = passwd;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }

}

객체를 생성합니다 :

Student s=new Student("佟丽娅","qwerty","女","银河系第一");

행동 분석의 장단점을 비교 :

모드 빌더 : 장점의 setter 메소드 생성자 우리는 명확하게 바로 바로 설정 높은 가독성을 알 수있는 가치를 무엇을 비슷한 방법으로 코멘트를 취할 수 있으며, 단점은 상대적으로 긴하다.

일반 루틴 : 비교적 간단한의 장점은 높은 효율의 개발은 단점은 인수가 많은 정말 있다면, 악마는 각 아 상응하는 무엇을 의미하는지 알고있다. (한 줄에 옵션 모두와 함께, 참여 생성자 내부에 전달 된 것이다);

게시 된 295 개 원래 기사 · 원 찬양 37 ·은 30000 +를 볼

추천

출처blog.csdn.net/tianshan2010/article/details/104721897