设计模式之-建造者模式通俗易懂理解,以及建造者模式的使用场景和示列代码

系列文章目录

设计模式之-6大设计原则简单易懂的理解以及它们的适用场景和代码示列
设计模式之-单列设计模式,5种单例设计模式使用场景以及它们的优缺点
设计模式之-3种常见的工厂模式简单工厂模式、工厂方法模式和抽象工厂模式,每一种模式的概念、使用场景和优缺点。
设计模式之模板方法模式,通俗易懂快速理解,以及模板方法模式的使用场景
设计模式之-建造者模式通俗易懂理解,以及建造者模式的使用场景和示列代码
设计模式之-代理模式,快速掌握理解代理模式,以及代理模式的使用场景
设计模式之-原型模式,快速掌握原型模式,通俗易懂的理解原型模式以及使用场景
设计模式之-中介者模式,快速掌握中介者模式,通俗易懂的讲解中介者模式以及它的使用场景
设计模式之-责任链模式,快速掌握责任链模式,通俗易懂的讲解责任链模式以及它的使用场景
设计模式之-装饰模式,快速掌握装饰模式,通俗易懂的讲解装饰模式以及它的使用场景



什么是建造者模式?

建造者模式是一种创建型设计模式,它可以将复杂对象的构建过程与其表示分离,使得同样的构建过程可以创建不同的表示。它允许客户端通过指定需要创建的对象类型和配置选项来构建对象,而无需知道具体的构建细节。

使用建造者模式的主要目的是将对象的构建过程封装在一个独立的建造者类中,使得构建过程可以灵活地组合,而不需要对客户端暴露具体的构建细节。这样可以提高代码的可读性、可维护性和可扩展性。

建造者模式通常涉及以下几个角色

产品(Product):

表示要构建的复杂对象。通常包含多个属性,其构建过程由具体的建造者来完成。

抽象建造者(Builder):

定义了构建产品的抽象方法,以及设置产品属性的方法。不同的具体建造者可以实现不同的构建算法,以及根据需要设置不同的产品属性。

具体建造者(Concrete Builder):

实现了抽象建造者的方法,完成具体的产品构建和属性设置。

指导者(Director):

负责调用建造者的方法来构建产品。它通常包含一个构建方法,用于指导建造过程的顺序和逻辑。

客户端(Client):

创建指导者对象,并通过指导者来构建产品。

建造者模式适用于以下场景

  1. 当需要创建复杂对象时,且对象的构建过程需要独立于其表示时,可以使用建造者模式。例如,当 构建一个具有多个组件的电脑时,每个组件的构建过程可能不同,但最终的电脑表示是一样的。
  2. 当需要使用相同的构建过程创建不同的表示时,可以使用建造者模式。例如,使用相同的构建过程可以创建不同类型的飞机,只需在具体建造者中设置不同的属性。
  3. 当需要将构建过程和表示分离,以便能够灵活地组合不同的构建过程和表示时,可以使用建造者模式。例如,可以通过组合不同的建造者和产品来构建复杂的对象。

代码示例

下面是一个实现的建造者模式示例,以创建一个电脑为例:

// 产品类:电脑
class Computer {
    private String cpu;
    private String memory;
    private String hardDrive;

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

    // 设置内存
    public void setMemory(String memory) {
        this.memory = memory;
    }

    // 设置硬盘
    public void setHardDrive(String hardDrive) {
        this.hardDrive = hardDrive;
    }

    // 显示电脑配置
    public void showConfiguration() {
        System.out.println("Computer Configuration:");
        System.out.println("CPU: " + cpu);
        System.out.println("Memory: " + memory);
        System.out.println("HardDrive: " + hardDrive);
    }
}

// 抽象建造者
interface ComputerBuilder {
    void buildCpu();
    void buildMemory();
    void buildHardDrive();
    Computer getComputer();
}

// 具体建造者:台式机建造者
class DesktopBuilder implements ComputerBuilder {
    private Computer computer;

    public DesktopBuilder() {
        computer = new Computer();
    }

    @Override
    public void buildCpu() {
        computer.setCpu("Intel Core i7");
    }

    @Override
    public void buildMemory() {
        computer.setMemory("16GB DDR4");
    }

    @Override
    public void buildHardDrive() {
        computer.setHardDrive("1TB SSD");
    }

    @Override
    public Computer getComputer() {
        return computer;
    }
}

// 具体建造者:笔记本建造者
class LaptopBuilder implements ComputerBuilder {
    private Computer computer;

    public LaptopBuilder() {
        computer = new Computer();
    }

    @Override
    public void buildCpu() {
        computer.setCpu("Intel Core i5");
    }

    @Override
    public void buildMemory() {
        computer.setMemory("8GB DDR4");
    }

    @Override
    public void buildHardDrive() {
        computer.setHardDrive("512GB SSD");
    }

    @Override
    public Computer getComputer() {
        return computer;
    }
}

// 指导者:电脑商店
class ComputerStore {
    private ComputerBuilder computerBuilder;

    public void setComputerBuilder(ComputerBuilder computerBuilder) {
        this.computerBuilder = computerBuilder;
    }

    public Computer getComputer() {
        computerBuilder.buildCpu();
        computerBuilder.buildMemory();
        computerBuilder.buildHardDrive();
        return computerBuilder.getComputer();
    }
}

// 客户端代码
public class Main {
    public static void main(String[] args) {
        ComputerStore computerStore = new ComputerStore();

        // 构建台式机
        ComputerBuilder desktopBuilder = new DesktopBuilder();
        computerStore.setComputerBuilder(desktopBuilder);
        Computer desktopComputer = computerStore.getComputer();
        desktopComputer.showConfiguration();

        // 构建笔记本
        ComputerBuilder laptopBuilder = new LaptopBuilder();
        computerStore.setComputerBuilder(laptopBuilder);
        Computer laptopComputer = computerStore.getComputer();
        laptopComputer.showConfiguration();
    }
}

在上面的示例中,Computer是要构建的产品,它包含了cpu、内存和硬盘等属性。ComputerBuilder是抽象建造者,定义了构建产品的抽象方法和获取产品的方法。DesktopBuilder和LaptopBuilder是具体建造者,它们分别实现了抽象建造者的方法,完成了具体的产品构建和属性设置。ComputerStore是指导者,负责调用建造者的方法来构建产品。
客户端代码中,首先创建一个ComputerStore对象,并设置相应的建造者。然后,通过调用getComputer方法来获取构建完成的产品,并进行展示。
通过使用建造者模式,客户端可以通过指定需要创建的对象类型和配置选项来构建对象,而无需知道具体的构建细节。建造者模式将复杂对象的构建过程与其表示分离,使得构建过程可以灵活地组合,提高了代码的可读性、可维护性和可扩展性。

  • 19
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
建造者模式(Builder Pattern)是一种创建型设计模式,用于将复杂对象的构建过程与其表示分离,使得同样的构建过程可以创建不同的表示。 建造者模式适用于以下场景: 1. 创建复杂对象:当需要创建一个具有多个组成部分或复杂构造过程的对象时,可以使用建造者模式。通过将构建逻辑分解为多个步骤,每个步骤由具体的建造者来实现,最终组合这些步骤,完成复杂对象的构建。 2. 需要不同表示的对象:建造者模式允许通过相同的构建过程创建不同的表示形式。通过定义不同的具体建造者,可以根据需要构建不同的对象表示。 3. 构建过程稳定,但表示不断变化:如果对象的构建过程相对稳定,但表示方式可能有所变化,可以使用建造者模式。只需要定义新的具体建造者来实现新的表示方式,而不需要修改已有的构建逻辑。 4. 避免重叠构造函数:某些情况下,一个对象可能有多个属性,并且可能存在多个属性组合的情况。使用建造者模式可以避免创建大量重叠参数的构造函数,提高代码可读性和可维护性。 5. 对象创建过程需要细粒度控制:建造者模式允许在构建过程中对对象的各个部分进行细粒度的控制和配置。通过设置不同的属性和调用不同的构建方法,可以灵活地控制对象的创建过程。 总之,建造者模式适用于需要构建复杂对象、有不同表示形式、构建过程相对稳定但表示可能变化、避免重叠构造函数和需要细粒度控制对象创建过程的场景。它能够提供更好的灵活性和可扩展性,同时将对象的构建过程与表示分离,使得代码更加清晰和易于维护。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值