目录
前言
一、定义
二、结构图
三、优缺点
四、代码
此文章记录自己所学,不对之处欢迎纠正。文中有些字段、图片通过书籍摘抄而来,非常感谢原作者。
建造者模式又被称为生成器模式。此模式不是专注于一个简单的产品,而是专注于一个由多个部件、产品组件而成的复杂产品。例如:电脑,电脑由cpu、显卡、键盘、鼠标、内存等构成,这些属于部件(单一的产品),而由这些部件所组装而成的电脑则是一个完整的产品。建造者模式所解决的问题就是:如何将这些部件(可能包含一定的顺序)组件成电脑(完整的产品),让用户能够使用。
Bulider:抽象建造者。包含构建产品各个组件方法,同时包含一个getResult()方法(返回产品对象)
ConcreteBuilder:具体建造者。实现Bulider接口,实现各个部件的具体构造和装配方法。
Product:产品类。被构建的复杂对象,包含多个组件。
Director:指挥者。复杂安排产品对象的建造次序。
1.v1版
/** * 抽象接口 * 构建课程的各个部件、返回课程对象工厂方法 */ public interface CourseBuilder { /** * 第一步 构建课程名称 * 具体由子类实现 * @param courseName */ void buildCourseName(String courseName); /** * 第二步 构建课程PPT * 具体由子类实现 * @param coursePPT */ void buildCoursePPT(String coursePPT); /** * 第三步 构建课程视频 * 具体由子类实现 * @param courseVideo */ void buildCourseVideo(String courseVideo); /** * 第四步 构建课程手记 * 具体由子类实现 * @param courseArticle */ void buildCourseArticle(String courseArticle); /** * 第五步 构建课程问答 * 具体由子类实现 * @param courseQA */ void buildCoureseQA(String courseQA); /** * 第六步 返回一个构建课程的方法,获得构建好的课程 * @return */ Course makeCourse(); }/** * 具体建造者 */ public class CourseActualBuilder implements 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 buildCourseArticle(String courseArticle) { course.setCourseArticle(courseArticle); } @Override public void buildCoureseQA(String courseQA) { course.setCourseQA(courseQA); } /** * 返回构建成功的课程 * @return */ @Override public Course makeCourse() { return course; } } /** * 课程对象 */ public class Course { /** 课程名称 */ private String courseName; /** 课程ppt */ private String coursePPT; /** 课程视频 */ private String courseVideo; /** 课程手机 */ private String courseArticle; /** 课程问题、答案 */ private String courseQA; getter、setter方法..... @Override public String toString() { return "Course{" + "courseName='" + courseName + '\'' + ", coursePPT='" + coursePPT + '\'' + ", courseVideo='" + courseVideo + '\'' + ", courseArticle='" + courseArticle + '\'' + ", courseQA='" + courseQA + '\'' + '}'; } }
/** * 指挥类 */ public class Director { /** 注入抽象类【定义创建的课程】 */ private CourseBuilder courseBuilder; public void setCourseBuilder(CourseBuilder courseBuilder) { this.courseBuilder = courseBuilder; } /** * 构建课程 * @param courseName * @param coursePPT * @param courseVideo * @param courseArticle * @param courseQA * @return */ public Course makeCourse(String courseName, String coursePPT, String courseVideo, String courseArticle,String courseQA){ this.courseBuilder.buildCourseName(courseName); this.courseBuilder.buildCoursePPT(coursePPT); this.courseBuilder.buildCourseVideo(courseVideo); this.courseBuilder.buildCourseArticle(courseArticle); this.courseBuilder.buildCoureseQA(courseQA); return this.courseBuilder.makeCourse(); } } /** * 测试类 */ 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设计模式", "java设计模式PPT", "java设计模式视频", "java设计模式手记", "java设计模式问答"); System.out.println(course); } }
2.v2版(链式调用)
/** * 课程对象 * 通过内部类进行链式调用 */ public class Course { /** 课程名称 */ private String courseName; /** 课程ppt */ 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; } @Override public String toString() { return "Course{" + "courseName='" + courseName + '\'' + ", coursePPT='" + coursePPT + '\'' + ", courseVideo='" + courseVideo + '\'' + ", courseArticle='" + courseArticle + '\'' + ", courseQA='" + courseQA + '\'' + '}'; } /** * 内部类 链式调用【返回this】 */ public static class CourseBuilder{ /** 课程名称 */ private String courseName; /** 课程ppt */ 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 buildCourseVideo(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); } } } /** * 测试类 */ public class Test { public static void main(String[] args) { Course course = new Course.CourseBuilder().buildCourseName("java设计模式名称").buildCoursePPT("java设计模式PPT").buildCourseVideo("java设计模式视频").build(); System.out.println(course); } }