设计模式:建造者模式

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

适用场景:如果一个对象有非常复杂的内部结构(属性多),或想把复杂对象的创建和使用分离

package com.edward.design.pattern.creational.builder;

/**
* Created by Edward on 2018/10/29.
*/
public class Course {

    private String courseName;
    private String coursePPT;
    private String courseVideo;
    private String courseArticle;
    private String courseQA;

    public Course(CourseBuilder courseBuilder){
        this.courseName = courseBuilder.courseName;
        this.coursePPT = courseBuilder.coursePPT;
        this.courseVideo = courseBuilder.courseVideo;
        this.courseArticle = courseBuilder.courseArticle;
        this.courseQA = courseBuilder.courseQA;
    }

    public static class CourseBuilder{ <--该类为内部静态类

        private String courseName;
        private String coursePPT;
        private String courseVideo;
        private String courseArticle;
        private String courseQA;

        public CourseBuilder buildCourseName(String courseName){
            this.courseName = courseName;
            return this;  <--每次都将该类对象返回,创建一次该类可以连续调用该类内部的成员(链式调用)
        }

        public CourseBuilder buildCoursePPT(String coursePPT){
            this.coursePPT = coursePPT;
            return this;
        }

        public CourseBuilder buildCorseVideo(String courseVideo){
            this.courseVideo = courseVideo;
            return this;
        }

        public CourseBuilder buildCourseArticle(String courseArticle){
            this.courseArticle = courseArticle;
            return this;
        }

        public CourseBuilder buildCourseQA(String courseQA){
            this.courseQA = courseQA;
            return this;
        }

        public Course build(){
            return new Course(this);
        }
    }



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

 

package com.edward.design.pattern.creational.builder;

/**
* Created by Edward on 2018/10/29.
*/
public class Test {

    public static void main(String[] args) {
        Course course = new Course.CourseBuilder().buildCourseName("JAVA").buildCoursePPT("JAVA-PPT").buildCorseVideo("JAVA-Video").buildCourseArticle("JAVA-Article").buildCourseQA("JAVA-QA").build();
        System.out.println(course);
    }
}
高亮加粗部分为链式调用,每一次调用的方法名都会提示参数内容,比较工厂方法(只是提供一个方法,需要传入创建对象的若干参数容易写错)更有条理和顺序
改课程类的创建顺序为:先得有课程名称(JAVA)、课程PPT(JAVA-PPT)、课程视频(JAVA-Video)、课程手记(JAVA-Article)、课程问答(JAVA-QA),最后才能创建对象

 

posted @ 2020-09-22 18:32  Edward_han  阅读(113)  评论(0编辑  收藏  举报