终于懂了建造者模式

时间:2022-07-22
本文章向大家介绍终于懂了建造者模式,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

介绍

我认为把知识给别人讲会,讲明白,自己才彻底明白。 努力把文章写好,写明白每一篇文章,分享给更多人。 一个赞、一个评论、一个关注,真的好开心,努力没有白费,得到了这么多人的认可。

文章目录

建造者模式

定义:

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

产品类

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