18、设计模式之建造者模式

public class Course {
    /** 视频 */
    private String video;
    /** 手札 */
    private String article;
    /** PPT文档 */
    private String ppt;
    /** 提问&&回答 */
    private String qa;
    /** 附件 */
    private String attach;

    public Course(){

    }
    public Course(CourseBuilder builder){
        this.video = builder.video;
        this.article = builder.article;
        this.ppt = builder.ppt;
        this.qa = builder.qa;
        this.attach = builder.attach;
    }

    @Override
    public String toString() {
        return "Course{" +
                "video='" + video + '\'' +
                ", article='" + article + '\'' +
                ", ppt='" + ppt + '\'' +
                ", qa='" + qa + '\'' +
                ", attach='" + attach + '\'' +
                '}';
    }

    /**
     * 静态内部类
     */
    public static class CourseBuilder {
        /** 视频 */
        private String video;
        /** 手札 */
        private String article;
        /** PPT文档 */
        private String ppt;
        /** 提问&&回答 */
        private String qa;
        /** 附件 */
        private String attach;

        public CourseBuilder buildVideo(String video){
            this.video = video;
            return this;
        }

        public CourseBuilder buildArticle(String article){
            this.article = article;
            return this;
        }

        public CourseBuilder buildPpt(String ppt){
            this.ppt = ppt;
            return this;
        }

        public CourseBuilder buildQa(String qa){
            this.qa = qa;
            return this;
        }

        public CourseBuilder buildAttach(String attach){
            this.attach = attach;
            return this;
        }

        public Course builder(){
            Course course = new Course(this);
            return course;
        }
    }
}

这里在每个buildXXX()方法最后添加 return this;用以支持链式调用

调用

public class Main {

    public static void main(String[] args) {
        System.out.println("建造者模式(链式调用)");
        Course course = new Course.CourseBuilder()
                .buildArticle("建造者模式")
                .buildAttach("随书源代码")
                .buildPpt("手札PPT文档")
                .buildVideo("讲解视频")
                .buildQa("问题解答")
                .builder();
        System.out.println(course);
    }
}

执行结果

建造者模式
Course{video='讲解视频', article='建造者模式', ppt='手札PPT文档', qa='问题解答', attach='随书源代码'}

猜你喜欢

转载自blog.csdn.net/crystalcs2010/article/details/83148706