建造者
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); } }


浙公网安备 33010602011771号