建造者模式

    xiaoxiao2022-07-14  166

    一、定义

    将一个复杂对象的构建与表示分离,用户只需制定需要建造的类型就可以得到它们,建造过程及细节不需要知道。

    二、适用场景

    复杂,多个属性。构建与表示需要分离。

    三、缺点

    产生多余的build。

    四、代码

    1)

    public class Course { @Override public String toString() { return "Course [courseArticle=" + courseArticle + ", courseName=" + courseName + ", coursePPT=" + coursePPT + ", courseQA=" + courseQA + ", courseVideo=" + courseVideo + "]"; } 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; } } 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 buildCourseArticle(String courseArticle) { course.setCourseArticle(courseArticle); } @Override public void buildCourseName(String courseName) { course.setCourseName(courseName); } @Override public void buildCoursePPT(String coursePPT) { course.setCoursePPT(coursePPT); } @Override public void buildCourseQA(String courseQA) { course.setCourseQA(courseQA); } @Override public void buildCourseVideo(String courseVideo) { // TODO Auto-generated method stub course.setCourseVideo(courseVideo); } @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 courseVideo, String courseQA, String courseArticle, String coursePPT){ this.courseBuilder.buildCourseName(courseName); this.courseBuilder.buildCourseVideo(courseVideo); this.courseBuilder.buildCourseQA(courseQA); this.courseBuilder.buildCourseArticle(courseArticle); this.courseBuilder.buildCoursePPT(coursePPT); 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 video", "QA", "article", "java ppt"); System.out.println(course.toString()); } }

    2)采用静态内部类的方式

    public class Course { private String courseName; private String coursePPT; private String courseVideo; private String courseArticle; private String courseQA; @Override public String toString() { return "Course [courseArticle=" + courseArticle + ", courseName=" + courseName + ", coursePPT=" + coursePPT + ", courseQA=" + courseQA + ", courseVideo=" + courseVideo + "]"; } public Course(CourseBuilder courseBuilder) { this.courseArticle = courseBuilder.courseArticle; this.courseName = courseBuilder.courseName; this.coursePPT = courseBuilder.coursePPT; this.courseQA = courseBuilder.courseQA; this.courseVideo = courseBuilder.courseVideo; } public static class CourseBuilder{ private String courseName; 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 buildVideo(String courseVideo){ this.courseVideo = courseVideo; return this; } public CourseBuilder buildCourseArticle(String courseArticle){ this.courseArticle = courseArticle; 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").build(); System.out.println(course); } }

     

    最新回复(0)