设计模式(七)建造者模式 链式调用优化

建造者

将一个复杂对象的构建和他的表示分离,使得同样的构建过程可以创建不同的表示

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

适用场景

对象有很复杂的内部结构(such as : 很多属性)

把对象的创建和使用分离

优点

封装性好创建和使用分离

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

缺点

产生多于的builder对象

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

建造者模式和工厂模式的区别

建造者注重方法的调用顺序,工厂注重产品

建造者可以创建由各种部件组成的复杂产品,工厂只要创建出来对象

建造者要知道产品的组成部件


有审查统一搭建和检查课程,


//课程建造者(可以声明为借口)
public abstract class CourseBuilder {
    public abstract void buildcoursename(String coursename);
    public abstract void buildcourseppt(String courseppt);
    public abstract void buildcoursevideo(String coursevideo);
    public abstract void buildcoursenote(String coursenote);
    public abstract void buildcourseQA(String courseQA);
    //在建立完课程元素后就要制作课程
    public abstract Course makeCourse();
}
//讲师
public class CourseActualBuilder extends CourseBuilder {
    private Course course=new Course();
    @Override
    public void buildcoursename(String coursename) {
        course.setCoursename(coursename);
    }

    @Override
    public void buildcourseppt(String courseppt) {
        course.setCourseppt(courseppt);
    }

    @Override
    public void buildcoursevideo(String coursevideo) {
        course.setCoursevideo(coursevideo);
    }

    @Override
    public void buildcoursenote(String coursenote) {
        course.setCoursenote(coursenote);
    }

    @Override
    public void buildcourseQA(String courseQA) {
        course.setCourseQA(courseQA);
    }
    //由于属性全在上面添加完成直接返回course就行
    @Override
    public Course makeCourse() {
        return course;
    }
}
//审查
package com.sun.com.sun.builder;

public class Coach {
    private CourseBuilder courseBuilder;

    public void setCourseBuilder(CourseBuilder courseBuilder){
        this.courseBuilder=courseBuilder;
    }
    //制作课程
    public Course makeCourse( String coursename, String courseppt, String coursevideo, String coursenote, String courseQA){
        this.courseBuilder.buildcoursename(coursename);
        this.courseBuilder.buildcourseppt(courseppt);
        this.courseBuilder.buildcoursevideo(coursevideo);
        this.courseBuilder.buildcoursenote(coursenote);
        this.courseBuilder.buildcourseQA(courseQA);
        return this.courseBuilder.makeCourse();
    }
}
//测试
package com.sun.com.sun.builder;

public class Test {
    public static void main(String[] args) {
        CourseBuilder courseBuilder = new CourseActualBuilder();
        Coach coach = new Coach();
        coach.setCourseBuilder(courseBuilder);
        Course course = coach.makeCourse("java", "nn", "jjjj", "结果集", "yesorno");
        System.out.println(course);
    }
}
//实体类
package com.sun.com.sun.builder;
//课程
public class Course {
    private String coursename;
    private String courseppt;
    private String coursevideo;
    private String coursenote;
    //question and answer
    private String courseQA;
    public void setCoursename(String coursename) {
        this.coursename = coursename;
    }
    public void setCourseppt(String courseppt) {
        this.courseppt = courseppt;
    }
    public void setCoursevideo(String coursevideo) {
        this.coursevideo = coursevideo;
    }
    public void setCoursenote(String coursenote) {
        this.coursenote = coursenote;
    }
    public void setCourseQA(String courseQA) {
        this.courseQA = courseQA;
    }
    public String getCoursename() {
        return coursename;
    }
    public String getCourseppt() {
        return courseppt;
    }
    public String getCoursevideo() {
        return coursevideo;
    }
    public String getCoursenote() {
        return coursenote;
    }
    public String getCourseQA() {
        return courseQA;
    }
    @Override
    public String toString() {
        return "Course{" +
                "coursename='" + coursename + '\'' +
                ", courseppt='" + courseppt + '\'' +
                ", coursevideo='" + coursevideo + '\'' +
                ", coursenote='" + coursenote + '\'' +
                ", courseQA='" + courseQA + '\'' +
                '}';
    }
}

链式调用优化

package com.sun.com.sun.builder;

import java.security.PublicKey;

//课程
public class Course {
    private String coursename;
    private String courseppt;
    private String coursevideo;
    private String coursenote;
    //question and answer
    private String courseQA;

    public Course(CourseBuilder courseBuilder) {
        this.coursename = courseBuilder.coursename;
        this.courseppt=courseBuilder.courseppt;
        this.coursevideo=courseBuilder.coursevideo;
        this.coursenote=courseBuilder.coursenote;
        this.courseQA=courseBuilder.courseQA;
    }

    public void setCoursename(String coursename) {
        this.coursename = coursename;
    }

    public void setCourseppt(String courseppt) {
        this.courseppt = courseppt;
    }

    public void setCoursevideo(String coursevideo) {
        this.coursevideo = coursevideo;
    }

    public void setCoursenote(String coursenote) {
        this.coursenote = coursenote;
    }

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

    public String getCoursename() {
        return coursename;
    }

    public String getCourseppt() {
        return courseppt;
    }

    public String getCoursevideo() {
        return coursevideo;
    }

    public String getCoursenote() {
        return coursenote;
    }

    public String getCourseQA() {
        return courseQA;
    }

    @Override
    public String toString() {
        return "Course{" +
                "coursename='" + coursename + '\'' +
                ", courseppt='" + courseppt + '\'' +
                ", coursevideo='" + coursevideo + '\'' +
                ", coursenote='" + coursenote + '\'' +
                ", courseQA='" + courseQA + '\'' +
                '}';
    }
    public static class CourseBuilder{
        private String coursename;
        private String courseppt;
        private String coursevideo;
        private String coursenote;
        //question and answer
        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 buildcoursevideo(String coursevideo){
            this.coursevideo=coursevideo;
            return this;
        }
        public CourseBuilder buildcoursenote(String coursenote){
            this.coursenote=coursenote;
            return this;
        }
        public CourseBuilder buildcourseQA(String courseQA){
            this.courseQA=courseQA;
            return this;
        }
        public Course build(){
            return new Course(this);
        }
    }
}
//测试
package com.sun.com.sun.builder;

public class Test {
    public static void main(String[] args) {
        Course course=new Course.CourseBuilder().buildcoursename("java").buildcoursenote("note").buildcourseppt("ppt").buildcoursevideo("video").buildcourseQA("QA").build();
        System.out.println(course);
    }
}

 

猜你喜欢

转载自blog.csdn.net/emptyee/article/details/87003641