建造者模式(Builder)

本文介绍建造者模式的基本定义、适用场景及其优点,并通过一个构建电脑的实例详细展示了建造者模式的实现过程,包括产品实体类、抽象Builder、Builder实现类及导演类的设计。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、基本定义:

1、意图:
将一个复杂对象构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
2、适用场景:
* 多个组成部分,都可以装配到同一个对象,但是产生的结果不相同
* 相同的方法,不同的执行顺序,产生不同的事件结果
例:电脑含有很多零配件,可以算是一个复杂对象。其中内存卡,主板、CPU等都是电脑的组成部分,如果构建一台电脑,不需要知道是如何组装的,只需要提供所需要的零配件型号,此时就可以用构建者模式。
3、优点:
* 可以使使用者不必知道内部组成的细节
* 具体构造是独立的,方便逐步细化
4、类图:
这里写图片描述
* Director:导演类,负责安排模块顺序,通知Builder开始构建
* Builder:抽象Builder类,规范产品的组建
* ConcreteBuilder:构造者实现类,实现抽象类的所有方法,并且返回一个组建好的对象
* Product:产品类

二、实例:

1、产品实体类:

public class Computer {
    private String cpu;
    private String mainBoard;
    private String ram;

    public String getCpu() {
        return cpu;
    }

    public void setCpu(String cpu) {
        this.cpu = cpu;
    }

    public String getMainBoard() {
        return mainBoard;
    }

    public void setMainBoard(String mainBoard) {
        this.mainBoard = mainBoard;
    }

    public String getRam() {
        return ram;
    }

    public void setRam(String ram) {
        this.ram = ram;
    }
}

2、抽象Builder:

public abstract class Builder {
    public abstract void buildCpu(String cpu);
    public abstract void buildMainBoard(String mainBoard);
    public abstract void buildRam(String ram);
    public abstract Computer build();
}

3、Builder实现类:

public class ComputerBuilder extends Builder {
    private Computer mComputer = new Computer();

    @Override
    public void buildCpu(String cpu) {
        mComputer.setCpu(cpu);
    }

    @Override
    public void buildMainBoard(String mainBoard) {
        mComputer.setMainBoard(mainBoard);
    }

    @Override
    public void buildRam(String ram) {
        mComputer.setRam(ram);
    }

    @Override
    public Computer build() {
        return mComputer;
    }
}

4、导演类:
起到封装的作用,避免深入到Builder内部的具体实现。可以传入不同的Builder实现对象。

public class ComputerDirector {
    private Builder mBuilder;

    private ComputerDirector(Builder builder) {
        this.mBuilder = builder;
    }

    public Computer createComputer(String cpu, String mainBoard, String ram) {
        mBuilder.buildCpu(cpu);
        mBuilder.buildMainBoard(mainBoard);
        mBuilder.buildRam(ram);
        return mBuilder.build();
    }
}

5、客户端调用:

public class ComputerTest {
    public static void main(String[] args){
        Builder builder = new ComputerBuilder();
        ComputerDirector director = new ComputerDirector(builder);
        director.createComputer("i3","my board", "4g");
    }
}

特点总结:
* 封装性:使用建造者模式,可以使客户端不用知道产品内部实现的细节
* 构造者比较独立,容易扩展

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值