夜微凉、的博客

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理
  76 随笔 :: 24 文章 :: 22 评论 :: 24万 阅读

建造者模式概念

是创建型模式之一,使用多个简单的对象创建一个复杂的对象,用于将一个复杂的构建与其表示分离,使得同样的构建过程可以创建不同的表示,然后通过一个Builder类创建最终对象。

建造者模式解决的问题

建造者模式主要用于解决软件系统中复杂对象的创建问题。例如复杂对象的创建通过各个部分的子对象用一定的算法构成,在需求变化时复杂对象面临大的改变,不利于系统的稳定,

使用建造者将各个部分的算法包装起来,需求变化只需要将算法的顺序以及组合方式改变即可。

一般有以下几个角色

抽象建造者(builder):描述具体建造者的公共接口,一般用来定义建造细节的方法,并不涉及具体的对象部件的创建。

具体建造者(ConcreteBuilder):描述具体建造者,并实现抽象建造者公共接口。

指挥者(Director):调用具体建造者来创建复杂对象(产品)的各个部分,并按照一定顺序(流程)来建造复杂对象。

产品(Product):描述一个由一系列部件组成较为复杂的对象。

实例代码:

抽象建造者: 

复制代码
/**
 * 建造者-抽象类
 */
public abstract class AbstractBuilder {

    /**
     * 构造颜色
     */
    abstract void buildColor();

    /**
     * 构造尺寸
     */
    abstract void buildSize();

    /**
     * 构造重量
     */
    abstract void buildWeight();

    /**
     * 构造长度
     */
    abstract void buildLength();

    /**
     * 构造电脑对象
     *
     * @return
     */
    abstract ProductComputer builderComputer();
}
复制代码

 具体建造者(ConcreteBuilder):

复制代码
/**
 * 具体建造者
 */
public class ConcreteBuilder extends AbstractBuilder {

    private ProductComputer productComputer;

    public ConcreteBuilder() {
        productComputer = new ProductComputer();
    }

    @Override
    void buildColor() {
        productComputer.setColor("红色");
    }

    @Override
    void buildSize() {
        productComputer.setSize("100*58");
    }

    @Override
    void buildWeight() {
        productComputer.setWeight("500g");
    }

    @Override
    void buildLength() {
        productComputer.setLength("10028");
    }

    @Override
    ProductComputer builderComputer() {
        return productComputer;
    }
}
复制代码

产品(Product):

复制代码
/**
 * 产品
 */
public class ProductComputer {

    private String color;
    private String size;
    private String weight;
    private String length;

    public String getColor() {
        return color;
    }

    public void setColor(String color) {
        this.color = color;
    }

    public String getSize() {
        return size;
    }

    public void setSize(String size) {
        this.size = size;
    }

    public String getWeight() {
        return weight;
    }

    public void setWeight(String weight) {
        this.weight = weight;
    }

    public String getLength() {
        return length;
    }

    public void setLength(String length) {
        this.length = length;
    }

    @Override
    public String toString() {
        return "ProductComputer{" +
                "color='" + color + '\'' +
                ", size='" + size + '\'' +
                ", weight='" + weight + '\'' +
                ", length='" + length + '\'' +
                '}';
    }
}
复制代码

指挥者(Director):

复制代码
/**
 * 指挥者
 */
public class Director {

    /**
     * 按照顺序建造产品
     *
     * @param abstractBuilder
     * @return
     */
    public ProductComputer createProduct(AbstractBuilder abstractBuilder) {
        abstractBuilder.buildColor();
        abstractBuilder.buildSize();
        abstractBuilder.buildWeight();
        abstractBuilder.buildLength();
        return abstractBuilder.builderComputer();
    }
}
复制代码

测试代码:

复制代码
@SpringBootTest
class DirectorTest {

    @Test
    void Director() {
        Director director = new Director();
        String str2 = director.createProduct(new ConcreteBuilder()).toString();

        System.out.println(str2);
    }
}
复制代码

 

posted on   夜、微凉  阅读(50)  评论(0编辑  收藏  举报
编辑推荐:
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
阅读排行:
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 字符编码:从基础到乱码解决
点击右上角即可分享
微信分享提示