建造者模式

1. 定义

建造者模式(Builder Pattern):将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。建造者模式是一种对象创建型模式。

可以用来简化复杂对象的构造过程。

对比现实世界,类似于:

  • 要造一台计算机主机,需要CPU、内存卡、显卡、电源等。组装过程也相对复杂,比如一些接线的处理。
  • 要造一辆汽车,需要底盘、方向盘、发动机、座椅、轮子等等。
  • 要造航空母舰,需要甲板、起飞装置、机库、动力系统、武器库等。

复杂对象一般具有这些特点:

  • 整体由多个部件组成。
  • 丰富的组装配置。
  • 复杂的组装流程。

建造者模式,把复杂的对象创建过程进行剥离,尤其是内部部件的配置,进行独立变化和维护。

2. 模式结构

主要角色有:

  • 抽象建造者(Abstract Builder),声明需要的部件。
  • 具体建造者(Concrete Builder),定义明确的部件。
  • 指挥者(Director),指挥组装过程。
  • 产品(Product),产品,由多个部件组成。

类图如下:
在这里插入图片描述

3. 代码

产品类,由多个部分组成,不同部分的组合可以视为一个新的产品:

public class Product {

    private Part1 part1;
    private Part2 part2;
    private Part3 part3;

    public void setPart1(Part1 part1) {
        this.part1 = part1;
    }

    public void setPart2(Part2 part2) {
        this.part2 = part2;
    }

    public void setPart3(Part3 part3) {
        this.part3 = part3;
    }
}

抽象构建者:

public interface IBuilder {
	 private Product product;
     public void build1();
     public void build2();
     public void build3();
     public Product getResult();
}

具体构建者 A:

public class BuilderA implements IBuilder {

    private Product product;

    public BuilderA() {
        product = new Product();
    }

    public void build1() {
        product.setPart1("A1");
    }

    public void build2() {
        product.setPart2("A2");
    }

    public void build3() {
        product.setPart3("A3");
    }

    public Product getResult() {
        return product;
    }
}

指挥者,指挥构建者生成产品:

public class Director {
    private IBuilder builder;
    public Director(IBuilder builder) {
        this.builder = builder;
    }

    public Product construct() {
        builder.build1();
        builder.build2();
        builder.build3();
        return builder.getResult();
    }
}

4. 特点

4.1. 优势

  • 屏蔽细节:使用者不需要完全了解建造细节。
  • 易于扩展:不同的建造者相互独立,新的产品可以创建新的建造者。

4.2. 缺点

  • 局限性:产品组成部分必须大部分相同。
  • 类膨胀:如果产品数量过多,也会导致建造者的数量膨胀。

4.3. 注意事项

  • 只有一种产品时,可以使用无抽象建造者,指挥者和建造者在一个类里面实现。
  • 多个产品差异很大的情况下,不推荐使用建造者。

4.4. 和抽象工厂模式的区别

  • 建造者模式返回一个完整产品,抽象工厂返回一套产品
  • 建造者模式侧重构造和组建复杂产品,工厂模式侧重生产不同类型的产品。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值