终于懂了建造者模式

介绍

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

建造者模式

定义:

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

产品类

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

展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 数字20 设计师: CSDN官方博客
应支付0元
点击重新获取
扫码支付

支付成功即可阅读