/** * 教練類,封裝了具體構建的細節 */ 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