建造者

1、定义:讲一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示

      用户只需指定需要建造的类型就可以得到它们,建造过程及细节不需要知道

     类型:创建型

2、适用场景

  如果一个对象有非常复杂的内部结构(很多属性)

  想把复杂的对象创建和使用分离

3、优点

  分装性好,创建和使用分离

  扩展性好,建造类之间独立、一定程度上解耦

4、缺点

  会产生多余的 Builder 对象

  产品内部发生变化,建造者都要修改,成本较大

5、实现

/**
 * @description
 * @author: hq
 * @create: 2022-08-27 22:34
 **/
public class Course {

    private String courseName;

    private String coursePPT;

    private String courseVideo;

    private String courseArticle;

    private String courseQA;

    public String getCourseName() {
        return courseName;
    }

    public void setCourseName(String courseName) {
        this.courseName = courseName;
    }

    public String getCoursePPT() {
        return coursePPT;
    }

    public void setCoursePPT(String coursePPT) {
        this.coursePPT = coursePPT;
    }

    public String getCourseVideo() {
        return courseVideo;
    }

    public void setCourseVideo(String courseVideo) {
        this.courseVideo = courseVideo;
    }

    public String getCourseArticle() {
        return courseArticle;
    }

    public void setCourseArticle(String courseArticle) {
        this.courseArticle = courseArticle;
    }

    public String getCourseQA() {
        return courseQA;
    }

    public void setCourseQA(String courseQA) {
        this.courseQA = courseQA;
    }

    @Override
    public String toString() {
        return "Course{" +
                "courseName='" + courseName + '\'' +
                ", coursePPT='" + coursePPT + '\'' +
                ", courseVideo='" + courseVideo + '\'' +
                ", courseArticle='" + courseArticle + '\'' +
                ", courseQA='" + courseQA + '\'' +
                '}';
    }

    /**
     * 简化版
     */
    public static class CourseBuilder {
        private Course course;

        public CourseBuilder() {
            this.course = new Course();
        }

        public CourseBuilder courseName(String courseName) {
            course.setCourseName(courseName);
            return this;
        }

        public CourseBuilder coursePPT(String coursePPT) {
            course.setCoursePPT(coursePPT);
            return this;
        }

        public CourseBuilder courseVideo(String courseVideo) {
            course.setCourseVideo(courseVideo);
            return this;
        }

        public CourseBuilder courseArticle(String courseArticle) {
            course.setCourseArticle(courseArticle);
            return this;
        }

        public CourseBuilder courseQA(String courseQA) {
            course.setCourseQA(courseQA);
            return this;
        }

        public Course build() {
            return this.course;
        }
    }
}
/**
 * @description
 * @author: hq
 * @create: 2022-08-27 22:40
 **/
public class Test {

    public static void main(String[] args) {
        Course course = new Course.CourseBuilder()
                .courseName("java")
                .coursePPT("javaPPT")
                .courseVideo("java课程")
                .courseArticle("java手记")
                .courseQA("java问答")
                .build();
        System.out.println(course);
    }

}

 

posted @ 2022-08-27 22:28  放手解脱  阅读(137)  评论(0)    收藏  举报