1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143
| public class Course { private String courseName; private String coursePPT; private String courseVideo; private String courseArticle; private String courseQA; }
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 buildCourseArticle(String courseArticle); 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 Course makeCourse() { return course; } }
public class Coach { private CourseBuilder courseBuilder; public void setCourseBuilder(CourseBuilder courseBuilder) { this.courseBuilder = courseBuilder; }
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.buildCourseQA(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); } }
------------------------------------------------- 演进:使用静态内部类 【把具体的实体类和实体类对应的Builder写在一个类里面,这里一个很关键的地方就是this和静态内部类的使用】 关于静态内部类: - 外部类可以访问内部类的所有方法与属性,包括私有方法与属性 - 不能够从静态内部类的对象中访问外部类的非静态成员 - 静态内部类属于外部类,而不是属于外部类的对象
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 builderCourseName(String courseName) { this.courseName = courseName; return this; } public CourseBuilder builderCoursePPT(String coursePPT) { this.coursePPT = coursePPT; return this; } ... public Course build() { return new Course(this); } } }
public class Test { public static void main(String[]args){ Course course = new Course.CourseBuilder() .builderCourseName("Java设计模式") .builderCoursePPT("Java设计模式PPT") .builderCourseVideo("Java设计模式视频") .builderCourseArticle("Java设计模式手记") .builderCourseQA("Java设计模式问答").build(); System.out.println(course); } }
|