介绍
我认为把知识给别人讲会,讲明白,自己才彻底明白。
努力把文章写好,写明白每一篇文章,分享给更多人。
一个赞、一个评论、一个关注,真的好开心,努力没有白费,得到了这么多人的认可。
建造者模式
定义:
将一个复杂对象的创建与他的表示分离,使得同样的构建过程可以构建不同的表示。
产品类
package Builder; /** * @Auther: truedei * @Date: 2020 /20-4-29 20:43 * @Description: */ public class ProductBook { private String bookName; private int bookId; public ProductBook() { } public ProductBook(String bookName, int bookId) { this.bookName = bookName; this.bookId = bookId; } public String getBookName() { return bookName; } public void setBookName(String bookName) { this.bookName = bookName; } public int getBookId() { return bookId; } public void setBookId(int bookId) { this.bookId = bookId; } @Override public String toString() { return "ProductBook{" + "bookName='" + bookName + '\'' + ", bookId=" + bookId + '}'; } }
抽象方法类
package Builder; /** *抽象方法 */ public interface ProductBuilder { void builderProductBookName(String bookName); void builderProductBookId(int bookId); ProductBook build(); }
建造者
package Builder; /** * @Auther: truedei * @Date: 2020 /20-4-29 20:47 * @Description:建造者 */ public class CreateProductBookBuilder implements ProductBuilder { //属性 private String bookName; private int bookId; @Override public void builderProductBookName(String bookName) { this.bookName=bookName; } @Override public void builderProductBookId(int bookId) { this.bookId = bookId; } @Override public ProductBook build() { return new ProductBook(this.bookName,this.bookId); } }
构造类
package Builder; /** * @Auther: truedei * @Date: 2020 /20-4-29 20:49 * @Description: */ public class Director { private ProductBuilder builder; public Director(ProductBuilder builder) { this.builder = builder; } public ProductBook makeProductBook(String bookName, int bookId){ //控制建造的顺序 builder.builderProductBookId(bookId); builder.builderProductBookName(bookName); //定义一个对象,用于返回 ProductBook productBook = builder.build(); return productBook; } }
测试
package Builder; /** * @Auther: truedei * @Date: 2020 /20-4-29 20:54 * @Description: */ public class Test { public static void main(String[] args) { ProductBuilder createProductBookBuilder = new CreateProductBookBuilder(); Director director = new Director(createProductBookBuilder); ProductBook productBook = director.makeProductBook("Linux", 202001); System.out.println(productBook); } }
测试结果
ProductBook{bookName=‘Linux’, bookId=202001}
应用常见
- 1、需要生成的对象具有复杂的内部结构
- 2、需要生成的对象内部属性本身相互依赖
- 3、与不可变对象配合使用
优点
- 1、建造者独立,容易扩展
- 2、便于控制细节风险
在源码中的应用
Spring的RequestMappingInfo