终于懂了建造者模式

简介: 终于懂了建造者模式

介绍

我认为把知识给别人讲会,讲明白,自己才彻底明白。

努力把文章写好,写明白每一篇文章,分享给更多人。

一个赞、一个评论、一个关注,真的好开心,努力没有白费,得到了这么多人的认可。


建造者模式

定义:

将一个复杂对象的创建与他的表示分离,使得同样的构建过程可以构建不同的表示。

产品类

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

目录
相关文章
|
5月前
|
设计模式 Java Maven
【建造者模式】
【建造者模式】
|
4月前
|
设计模式 Java
Java设计模式【四】:建造者模式
Java设计模式【四】:建造者模式
24 0
|
1月前
|
设计模式 C++
【C++】—— 建造者模式
【C++】—— 建造者模式
|
7月前
|
算法 程序员
建造者模式的运用
建造者模式的运用
27 0
|
4月前
创建型 建造者模式
创建型 建造者模式
24 0
|
5月前
建造者模式
建造者模式
25 1
|
8月前
|
设计模式 C++
2023-6-13-第四式建造者模式
2023-6-13-第四式建造者模式
46 0
|
9月前
|
缓存 Java C++
建造者模式解读
建造者模式解读
建造者模式解读
|
11月前
|
算法
创建型模式-建造者模式
创建型模式-建造者模式
43 0
|
设计模式
我学会了,建造者模式
建造者模式属于创建型模式,这个类型的设计模式是将 对象的创建和使用解耦了,花式的去创建对象。
128 0
我学会了,建造者模式