建造者模式(Builder Pattern)

建造者模式是一种创建型设计模式,用于创建复杂的对象,它将对象的构建与表示分离,使用户无需了解内部构造细节。模式包含抽象建造者和具体建造者,后者实现产品的组件构建,而指挥者负责协调建造过程。建造者模式的优点在于灵活性和解耦,但当产品差异大或内部结构复杂时,可能增加理解和维护成本。常用于需要创建具有复杂结构的对象的场景。
摘要由CSDN通过智能技术生成

建造者模式

创建型模式——建造者模式


文章目录


前言

包含多个组成部分的复杂对象的创建

建造者模式(Builder Pattern)是最复杂的创建型模式,它用于创建一个包含多个组成部分的复杂对象,可以返回一个完整的产品对象给用户。它通过将客户端与包含多个组成部分的复杂对象的创建过程分离,使得客户端无需知道复杂对象的内部组成部分与装配方式,只需要知道建造者的类型即可。它关注如何一步一步创建一个复杂对象,不同的具体建造者定义了不同的创建过程,且具体建造者相互独立,增加新的建造者非常方便,系统具有较好的扩展性。


提示:以下是本篇文章正文内容,下面案例可供参考

一、模式定义

  • 建造者模式(Builder Pattern):将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
  • 建造者模式是一步一步创建一个复杂的对象,它允许用户只通过指定复杂对象的类型和内容就可以构建它们,用户不需要知道内部的具体构建细节。建造者模式属于对象创建型模式。

二、模式结构

UML类图

三、模式分析

(一)代码实现

代码如下:

产品:一个由多种组件组合生成的复杂对象

public class Product {
	private String partA; //定义部件,部件可以是任意类型,包括值类型和引用类型
	private String partB;
	private String partC;

	//partA的Getter方法和Setter方法省略
	//partB的Getter方法和Setter方法省略
	//partC的Getter方法和Setter方法省略
}

抽象建造者

public abstract class Builder {
    //创建产品对象
    protected Product product=new Product();
    public abstract void buildPartA();
    public abstract void buildPartB();
    public abstract void buildPartC();

    //返回产品对象
    public Product getResult() {
        return product;
    }
}

具体建造者

public class ConcreteBuilder1 extends Builder{
    public void buildPartA() {
        product.setPartA("A1");
    }
    public void buildPartB() {
        product.setPartB("B1");
    }
    public void buildPartC() {
        product.setPartC("C1");
    }
}

指挥者

public class Director {
    private Builder builder;

    public Director(Builder builder) {
        this.builder=builder;
    }

    public void setBuilder(Builder builder) {
        this.builder=builer;
    }
    //产品构建与组装方法
    public Product construct() {
        builder.buildPartA();
        builder.buildPartB();
        builder.buildPartC();
        return builder.getResult();
    }
}

客户

......

Builder builder = new ConcreteBuilder1(); //可通过配置文件实现
Director director = new Director(builder);
Product product = director.construct();

......

(二)模式优点

  1. 客户端不必知道产品内部组成的细节,将产品本身与产品的创建过程解耦,使得相同的创建过程可以创建不同的产品对象
  2. 每一个具体建造者都相对独立,与其他的具体建造者无关,因此可以很方便地替换具体建造者或增加新的具体建造者,扩展方便,符合开闭原则
  3. 可以更加精细地控制产品的创建过程

(三)模式缺点

  1. 建造者模式所创建的产品一般具有较多的共同点,其组成部分相似,如果产品之间的差异性很大,不适合使用建造者模式,因此其使用范围受到一定的限制
  2. 如果产品的内部变化复杂,可能会需要定义很多具体建造者类来实现这种变化,导致系统变得很庞大,增加了系统的理解难度和运行成本

四、使用情形

  • 需要生成的产品对象有复杂的内部结构,这些产品对象通常包含多个成员变量
  • 需要生成的产品对象的属性相互依赖,需要指定其生成顺序
  • 对象的创建过程独立于创建该对象的类。在建造者模式中通过引入了指挥者类,将创建过程封装在指挥者类中,而不在建造者类和客户类中
  • 隔离复杂对象的创建和使用,并使得相同的创建过程可以创建不同的产品

总结

须掌握模式动机,理解指挥者的意义

  • 省略抽象建造者角色
    • 系统中只需要1个建造者时
  • 省略指挥者角色
    • 系统中只需要1个建造者是,省略抽象建造者、还可继续省略指挥者,让Builder角色扮演指挥者与建造者双重角色
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

街酒jsan

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值