前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >终于懂了建造者模式

终于懂了建造者模式

作者头像
手撕代码八百里
发布2020-07-28 23:52:07
2910
发布2020-07-28 23:52:07
举报
文章被收录于专栏:猿计划猿计划

介绍

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

文章目录

  • 介绍
  • 建造者模式
  • 产品类
  • 抽象方法类
  • 建造者
  • 构造类
  • 测试
  • 测试结果
  • 应用常见
  • 优点
  • 在源码中的应用

建造者模式

定义:

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

产品类

代码语言:javascript
复制
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 +
                '}';
    }
}

抽象方法类

代码语言:javascript
复制
package Builder;

/**
 *抽象方法
 */
public interface ProductBuilder {
     void builderProductBookName(String bookName);
     void builderProductBookId(int bookId);


     ProductBook build();
}

建造者

代码语言:javascript
复制
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);

    }

}

构造类

代码语言:javascript
复制
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;
    }

}

测试

代码语言:javascript
复制
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

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-04-29 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 介绍
    • 文章目录
    • 建造者模式
    • 产品类
    • 抽象方法类
    • 建造者
    • 构造类
    • 测试
    • 测试结果
    • 应用常见
    • 优点
    • 在源码中的应用
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档