设计模式之建造者模式

这篇具有很好参考价值的文章主要介绍了设计模式之建造者模式。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1、简单介绍:

建造者模式(Builder Pattern)是一种创建型设计模式,它将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。这种模式适用于需要分步骤创建复杂对象、构造过程可能需要改变、或者需要隐藏复杂对象的具体构建过程的场景。

2、主要角色:

  • Product(产品):表示需要构建的复杂对象。
  • Builder(抽象建造者):定义创建产品对象的各个部分(部件)的接口,并声明一个返回产品对象的方法。
  • ConcreteBuilder(具体建造者):实现抽象建造者的接口,具体定义创建产品对象各部分的方法,并提供一个方法返回创建完成的产品对象。
  • Director(指挥者):负责安排复杂对象的构建顺序,它只与抽象建造者接口交互,不关心具体的建造细节。指挥者可以构造一个指导创建过程的算法,统一构造过程。

3、Java代码示例:

假设我们有一个复杂的Computer类,包含多个组成部分(CPU、RAM、HardDrive等),我们使用建造者模式来构建它:

// Product(产品)
public class Computer {
    private String cpu;
    private int ram;
    private String hardDrive;

    public Computer(String cpu, int ram, String hardDrive) {
        this.cpu = cpu;
        this.ram = ram;
        this.hardDrive = hardDrive;
    }

    public String getCpu() {
        return cpu;
    }

    public int getRam() {
        return ram;
    }

    public String getHardDrive() {
        return hardDrive;
    }

    @Override
    public String toString() {
        return "Computer{" +
                "cpu='" + cpu + '\'' +
                ", ram=" + ram +
                ", hardDrive='" + hardDrive + '\'' +
                '}';
    }
}

// Builder(抽象建造者)
public abstract class ComputerBuilder {
    protected Computer computer;

    public ComputerBuilder() {
        computer = new Computer("", 0, "");
    }

    public abstract void buildCpu(String cpu);
    public abstract void buildRam(int ram);
    public abstract void buildHardDrive(String hardDrive);

    public Computer getComputer() {
        return computer;
    }
}

// ConcreteBuilder(具体建造者)
public class DesktopComputerBuilder extends ComputerBuilder {
    @Override
    public void buildCpu(String cpu) {
        computer.setCpu(cpu);
    }

    @Override
    public void buildRam(int ram) {
        computer.setRam(ram);
    }

    @Override
    public void buildHardDrive(String hardDrive) {
        computer.setHardDrive(hardDrive);
    }
}

// Director(指挥者)
public class ComputerDirector {
    public Computer constructDesktopComputer(String cpu, int ram, String hardDrive) {
        DesktopComputerBuilder builder = new DesktopComputerBuilder();
        builder.buildCpu(cpu);
        builder.buildRam(ram);
        builder.buildHardDrive(hardDrive);
        return builder.getComputer();
    }
}

// 客户端代码
public class Client {
    public static void main(String[] args) {
        ComputerDirector director = new ComputerDirector();
        Computer desktop = director.constructDesktopComputer("Intel Core i7", 16, "SSD 512GB");
        System.out.println(desktop);
    }
}

4、使用过程中可能遇到的问题:

过度设计:如果对象并不复杂,或者创建过程不需要灵活变化,使用建造者模式可能会显得过度设计。在这种情况下,直接使用构造函数或工厂方法创建对象可能更为合适。

建造者类膨胀:随着产品复杂性的增加,建造者类可能会包含大量方法,变得难以理解和维护。

与模板方法模式混淆:建造者模式和模板方法模式在结构上有些相似,可能会导致混淆。模板方法模式主要用于算法骨架的固定与实现步骤的可变,而建造者模式关注的是复杂对象的构建过程。

不符合单一职责原则:有时建造者可能同时负责创建对象和管理对象的生命周期,这违反了单一职责原则。

测试困难:由于建造者模式涉及多个类和复杂的交互,可能使得单元测试变得困难。

5、可能遇到的问题的解决方案:

过度设计解决方案:评估对象的复杂度和构建过程的需求,确保建造者模式是必要的。对于简单对象,选择更轻量级的创建方式。

建造者类膨胀解决方案:可以考虑将建造者类拆分为多个子建造者,每个子建造者负责构建产品的一部分。这样可以降低单个建造者的复杂度,同时保持构建过程的灵活性。

与模板方法模式混淆解决方案:明确区分两种模式的应用场景和目的,根据实际需求选择合适的模式。

不符合单一职责原则解决方案:确保建造者仅负责对象的构建,对象的管理和生命周期应由其他组件(如工厂、容器等)负责。可以结合其他设计模式(如工厂模式、服务定位器模式等)来分离这些职责。

测试困难解决方案:为建造者类和产品类编写详细的单元测试,确保每个部分的行为符合预期。使用依赖注入或模拟对象技术来隔离测试,便于测试不同组合和配置。

注意

        建造者模式在构建复杂对象时能够提供清晰、灵活的创建过程,但需注意避免过度设计、类膨胀等问题,并确保与相关设计原则和模式正确结合,以提升代码的可读性、可维护性和可测试性。

设计模式之建造者模式,数据结构和算法,Java基础,编程语言,设计模式,建造者模式文章来源地址https://www.toymoban.com/news/detail-856829.html

到了这里,关于设计模式之建造者模式的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 设计模式(三)建造者模式

    相关文章 设计模式系列 1.建造者模式简介 定义 建造者模式(builder),将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。 简介 建造者模式(builder)是创建一个复杂对象的创建型模式,将构建复杂对象的过程和它的部件解耦,使得构建过程和

    2024年03月17日
    浏览(50)
  • 设计模式之建造者模式

    建造者模式(Builder Pattern) 是一种创建型设计模式,它将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。这种模式适用于需要分步骤创建复杂对象、构造过程可能需要改变、或者需要隐藏复杂对象的具体构建过程的场景。 Product(产品) :表

    2024年04月24日
    浏览(31)
  • 设计模式(9)建造者模式

    一、介绍 1、概念:将一个复杂对象的构造与它的表示分离,使得同样的构造过程可以创建不同的表示。建造者模式主要用于创建一些复杂的对象,这些对象内部构建间的顺序通常是稳定的,但对象内部的构建通常面临着复杂的变化;建造者模式的好处就是使得建造代码与表

    2024年02月11日
    浏览(38)
  • Java设计模式-建造者模式

    建造者模式是一种创建型设计模式,用于将复杂对象的构建过程与其表示分离,使得同样的构建过程可以创建不同的表示。建造者模式通过将复杂对象的构建过程分解为多个简单的步骤来实现。 与其他创建型模式不同,建造者模式强调的是将构建过程与表示分离,而不是将对

    2024年02月02日
    浏览(40)
  • 【创建型设计模式】C#设计模式之建造者模式

    参考代码:

    2024年02月13日
    浏览(42)
  • 【设计模式】建造者模式就是游戏模式吗?

    传说女娲是用泥巴捏出人来的,当时捏出的小泥人虽然每个都是两条腿、两只手、一个脑袋的样子,但是具体到每个部位,却有有所不同:有的小泥人手长一点,有的手短一点;有的脑袋圆鼓鼓的,有的脑袋尖尖的······ 造物者归纳起来其实就一句话: 女娲造人,形态各

    2024年01月21日
    浏览(37)
  • 设计模式-创建型模式之建造者模式

    无论是在现实世界中还是在软件系统中,都存在一些复杂的对象,它们拥有多个组成部分,如汽车,它包括车轮、方向盘、发送机等各种部件。而对于大多数用户而言,无须知道这些部件的装配细节,也几乎不会使用单独某个部件,而是使用一辆完整的汽车,可以通过建造者

    2023年04月20日
    浏览(38)
  • 设计模式—创建型模式之建造者模式

    如果我们创建的对象比较复杂,但其细节还要暴露给使用者,这样就需要用到建造者模式。 建造者设计模式, 屏蔽过程,而不屏蔽细节。 比如我们有一个手机类,定义如下: 我们想定制自己的一个手机,可以先定义一个抽象的构建者; 如果我们想定制一个 香蕉手机 ,就可

    2024年02月06日
    浏览(43)
  • 设计模式之建造者模式与原型模式

    目录 建造者模式 简介 使用场景 优缺点 模式结构 实现 原型模式 简介 应用场景 优缺点 模式结构 实现         将复杂对象的构建与表示进行分离,使得同样的构建过程可以创建不同的表示。是一个将复杂的对象分解为多个简单的对象,然后一步一步构建而成。它将变与不

    2024年02月10日
    浏览(38)
  • 设计模式之创建型模式---建造者模式

    建造者模式是一种创建型设计模式,其核心思想是将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。该模式将复杂对象的创建过程拆分成多个简单对象的创建过程,并将这些简单对象组合起来构建出复杂对象。 建造者模式的基本构成通常包括

    2024年04月15日
    浏览(49)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包