/** * 教练类,封装了具体构建的细节 */ public class Coach { private AProductBuilder productBuilder; public void setProductBuilder(AProductBuilder productBuilder) { this.productBuilder = productBuilder; } public Product createProduct(String property) { productBuilder.buildProperty(property); return this.productBuilder.makeProduct(); } } /** * 抽象的构建,每添加新的构建方式,只须要继承这个抽象类便可 */ public abstract class AProductBuilder { /** * 构建具体属性,只是mock一个,能够有不少个 * @param property */ abstract void buildProperty(String property); /** * 返回被构建的对象 * @return */ abstract Product makeProduct(); } /** * 产品具体的构建类 */ public class ProductActualBuilder extends AProductBuilder { private Product product = new Product(); @Override void buildProperty(String property) { product.setProperty(property); } @Override Product makeProduct() { return product; } } /** * 产品类 */ public class Product { /** * 产品实现细节,能够不少个属性,这里只mock了一个 */ private String property; public void setProperty(String property) { this.property = property; } public String getProperty() { return property; } }
public class Test { public static void main(String[] args) { Coach coach = new Coach(); coach.setProductBuilder(new ProductActualBuilder()); Product product = coach.createProduct("测试属性"); System.out.println(product.getProperty()); } }
测试属性
抽象建造者模式中的元素html
/** * 产品类 */ public class Product { /** * 产品属性,只是举了一个例子,能够有不少个 */ private String property; /** * 产品的构建 构造方法 * @param productBuilder */ public Product (ProductBuilder productBuilder) { this.property = productBuilder.property; } public String getProperty() { return property; } public void setProperty(String property) { this.property = property; } /** * 产品构建类 */ public static class ProductBuilder { private String property; public ProductBuilder builderProperty (String property) { this.property = property; return this; } public Product build() { return new Product(this); } } }
测试属性
静态内部类建造者模式的元素java
/** * 课程教练类 */ 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.buildCourseArticle(courseArticle); this.courseBuilder.buildCourseVideo(courseVideo); this.courseBuilder.buildCourseQA(courseQA); return this.courseBuilder.makeCourse(); } } /** * 建造者的具体实现与应用 */ 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 void buildCourseVideo(String courseVideo) { course.setCourseVideo(courseVideo); } @Override public void buildCourseArticle(String courseArticle) { course.setCourseArticle(courseArticle); } @Override public void buildCourseQA(String courseQA) { course.setCourseQA(courseQA); } @Override public Course makeCourse() { return course; } } /** * 具体产品的实例:课程 */ public class Course { private String courseName; private String coursePPT; private String courseVideo; private String courseArticle; //question & answer 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 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); } }
Course{courseName='Java设计模式精讲', coursePPT='Java设计模式精讲PPT', courseVideo='Java设计模式精讲视频', courseArticle='Java设计模式精讲手记', courseQA='Java设计模式精讲问答'}
/** * 课程类 */ public class Course { private String courseName; private String coursePPT; private String courseVideo; private String courseArticle; //question & answer private String courseQA; public Course(CourseBuilder courseBuilder) { this.courseName = courseBuilder.courseName; this.courseArticle = courseBuilder.courseArticle; this.coursePPT = courseBuilder.coursePPT; this.courseVideo = courseBuilder.courseVideo; this.courseQA = courseBuilder.courseQA; } @Override public String toString() { return "Course{" + "courseName='" + courseName + '\'' + ", coursePPT='" + coursePPT + '\'' + ", courseVideo='" + courseVideo + '\'' + ", courseArticle='" + courseArticle + '\'' + ", courseQA='" + courseQA + '\'' + '}'; } /** * 课程静态builder类 */ public static class CourseBuilder { private String courseName; private String coursePPT; private String courseVideo; private String courseArticle; //question & 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 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 course1 = new Course.CourseBuilder() .buildCourseName("Java课程精讲") .buildCourseArticle("Java课程精讲手机") .buildCoursePPT("Java课程精讲PPT") .buildCourseVideo("Java课程精讲视频") .build(); System.out.println(course1.toString()); Course course2 = new Course.CourseBuilder() .buildCourseName("Java课程精讲") .buildCourseVideo("Java课程精讲视频") .build(); System.out.println(course2.toString()); } }
Course{courseName='Java课程精讲', coursePPT='Java课程精讲PPT', courseVideo='Java课程精讲视频', courseArticle='Java课程精讲手机', courseQA='null'} Course{courseName='Java课程精讲', coursePPT='null', courseVideo='Java课程精讲视频', courseArticle='null', courseQA='null'}
建造者模式
:https://github.com/sigmako/design-pattern/tree/master/buildergit
慕课网设计模式精讲
: https://coding.imooc.com/class/270.html 23种设计模式(4):建造者模式
: https://blog.csdn.net/zhengzhb/article/details/7375966