建造者模式(Builder Pattern)

建造者模式(Builder Pattern) 建造者模式是一种创建型设计模式,它提供了一种创建复杂对象的方式,使得构建过程和表示分离。通过定义抽象的建造者接口和具体的建造者类,可以灵活地构建不同的表示。建造者模式在处理复杂对象的构建和表示分离方面具有很大的优势,但同时也需要注意代码复杂度和重构难度。 阅读详情

一、什么是建造者模式

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

建造者模式属于创建型模式,对使用者而言,只需要指定需要建造的类型就可以获得对象,建造过程和细节不需要了解。在实际的开发过程中,使用 Builder Pattern 来替代多参数构造函数是一个比较好的实践法则。

建造者模式的概念听上去有点抽象,但是实际上可以这么说,基本上大家都用过,只是可能自己不知道这就是建造者模式而已。

二、建造者模式角色

1️⃣产品(Product):要创建的产品对象。

public class Product {
    private String name;
    private Integer val;

    Product(String name, Integer val) {
        this.name = name;
        this.val = val;
    }
    @Override
    public String toString() {
        return "Product is " + name + " value is " + val;
    }
}

2️⃣抽象建造者(Builder):建造者的抽象类,规范产品对象的各个组成部分的建造,一般由子类实现具体建造过程。

public abstract class Builder {

    protected Integer val;
    protected String name;

    // 设置产品不同部分,以获得不同的产品
    public abstract void setVal(Integer val);
    // 设置名字 公用方法
    public void setName(String name) {
        this.name = name;
    }
    // 建造产品
    public abstract Product buildProduct();
}

3️⃣具体建造者(ConcreteBuilder):具体的 Builder 类,根据不同的业务逻辑,具体到各个对象的各个组成部分的建造。

public class ConcreteBuilder extends Builder {

    @Override
    public void setVal(Integer val) {
        this.val = val + 100;
    }
    @Override
    // 组建一个产品
    public Product buildProduct() {
        // 此处还可以写特殊的校验逻辑
        return new Product(name, val);
    }
}

4️⃣调用者(Director):调用具体的建造者来创建各个对象的各个部分。

public class Director {
    private Builder builder = new ConcreteBuilder();
    public Product getAProduct() {
        // 设置不同的零件,产生不同的产品
        builder.setName("ProductA");
        builder.setVal(2);
        return builder.buildProduct();
    }
}

三、示例

在设计模式中对 Builder Pattern 的定义是用于构建复杂对象的一种模式,所构建的对象往往需要多步初始化或赋值才能完成。在实际的开发过程中,使用 Builder Pattern 来替代多参数构造函数是一个比较好的实践法则。

常常遇到编写一个这样的实现类,这个类拥有多个构造函数:

DoContact(String name);
DoContact(String name, int age);
DoContact(String name, int age, String address);
DoContact(String name, int age, String address, int cardID);

这样一系列的构造函数主要目的就是为了提供给客户更多的调用选择,以处理不同的构造请求。这种方法很常见,很有效力,但缺点也很多:
1️⃣类的作者不得不书写多种参数组合的构造函数,而且其中还需要设置默认参数值,这是一个细心而又枯燥的工作。
2️⃣其次,这样的构造函数灵活性也不高,而且在调用时不得不提供一些没有意义的参数值,例如,DoDoContact(“Ace”, -1, “SH”),显然年龄为负数没有意义,但是又不得不这样做,以符合 Java 的规范。如果这样的代码发布后,后面的维护者就会很头痛,因为根本不知道这个 -1 是什么含义。

对于这样的情况,就非常适合使用 Builder Pattern。Builder Pattern的要点就是通过一个代理来完成对象的构建过程。这个代理职责就是完成构建的各个步骤,同时它也是易扩展的。下面是改写自 Effective Java 里面的一段代码:

public class DoContact {
    private final int age;
    private final int safeID;
    private final String name;
    private final String address;

    public int getAge() {
        return age;
    }
    public int getSafeID() {
        return safeID;
    }
    public String getName() {
        return name;
    }
    public String getAddress() {
        return address;
    }

    public static class Builder {
        private int age = 0;
        private int safeID = 0;
        private String name = null;
        private String address = null;

        // 构建的步骤
        public Builder(String name) {
            this.name = name;
        }
        public Builder age(int val) {
            this.age = val;
            return this;
        }
        public Builder safeID(int val) {
            this.safeID = val;
            return this;
        }
        public Builder address(String val) {
            this.address = val;
            return this;
        }
        // 构建,返回一个新对象
        public DoContact build() {
            return new DoContact(this);
        }
    }

    private DoContact(Builder b) {
        age = b.age;
        safeID = b.safeID;
        name = b.name;
        address = b.address;
    }
}

最终,调用者可以很灵活的去构建这个对象:

public class kfd {
    public static void main(String[] args) {
        DoContact object = new DoContact.Builder("MChopin").age(18)
                .address("shanghai").build();
        System.out.println("name=" + object.getName() + " age=" + object.getAge()
                + " address=" + object.getAddress());
    }
}

四、建造者模式优缺点

1️⃣优点

  1. 封装性好,创建和使用分离
  2. 扩展性好,建造类之间独立,一定程度上实现了解耦

2️⃣缺点

  1. 产生多余的 Builder 对象
  2. 产品内部发生变化时,建造者都需要修改,成本较大

五、建造者模式和工厂模式区别

建造者模式有点类似于工厂模式,都是用来创建一个对象,但是有很大的区别,主要区别如下:

1️⃣建造者模式更加注重方法的调用顺序,工厂模式注重于创建完整对象。
2️⃣建造者模式根据不同的产品零件和顺序可以创造出不同的产品,而工厂模式创建出来的产品都是一样的。
3️⃣建造者模式使用者需要知道这个产品有哪些零件组成,而工厂模式的使用者不需要知道,直接创建就行。

建造者模式 (Builder Pattern) 建造者模式是处理复杂对象创建的强大工具,它将对象的构建过程与表示分离,提供了灵活且清晰的对象创建方式。 阅读详情

相关推荐

设计模式(五)——建造者模式详解

组装的过程相当于构建主机对象的过程,而组装好的主机就相当于对象的表示。 分离了部件的构造(由Builder来负责)和装配(由Director负责)。从而可以构建复杂的对象。这个模式适用于:某个对象构建复杂的情况。 由于实现了构建和装配的解耦,不同的构建器,相同的装配,也可以做出不同的对象,相同的构建器,不同的装配顺序也可以做出不同的对象。也就是实现了构建算法,装配算法的解耦,实现了更好的复用。 建造者模式可以将部件和其组装过程分开,一步一步创建一个复杂的对象。用户只需指定复杂对象的类型就可以得到该对象,而

壹升茉莉清的博客 1315

【设计模式——学习笔记】23种设计模式——建造者模式Builder(原理讲解+应用场景介绍+案例介绍+Java代码实现)

讲解建造者模式的思想,介绍其常见的应用场景,举例说明建造者模式的实现方式

我只管埋头前行,剩下的交给时间。 1万+

ATM火控电容改造实战:提升速凌无刷电机动力与系统稳定性

在嵌入式系统与电机驱动领域,电源完整性是保障电路稳定运行的核心基础。其核心原理在于通过合理的电容网络设计,为负载提供瞬时大电流并滤除高频噪声,从而维持电压稳定。这项技术的核心价值在于能显著提升系统的动态响应能力与可靠性,避免因电压跌落导致微控制器复位或功率器件过应力。典型的应用场景包括无人机电调、机器人关节驱动以及各类需要快速响应的伺服系统。本文聚焦于水弹发射器ATM火控系统的硬件迭代,通过详解电容的选型、布局与焊接流程,特别是针对速凌五代无刷电机的高启动电流特性,系统性地阐述了如何通过强化电源储能与芯片去

weixin_33868027的博客 555

设计模式第10讲——建造者模式(Builder)

建造者模式是一种创建型设计模式,也叫生成器模式。一、什么是建造者模式 二、角色组成 三、优缺点 四、应用场景4.1 生活场景4.2 java场景 五、代码实现5.0 UML类图5.1 产品类(Product)5.2 抽象建造者(Builder)5.3 具体构建者(ConcreteBuilder)5.4 指导者(Director)5.5 testBuilder六、总结

让~学习~成为一种习惯(橡 皮 人の技术博客) 2万+

Unity AssetBundle解包实战指南:从工具使用到编程解析

在游戏开发与资源管理中,资源打包与加载是核心技术环节。AssetBundle作为Unity引擎官方推荐的资源分发方案,其本质是一个包含头部信息、目录表、数据区及依赖关系的结构化文件系统,通过序列化机制将游戏资源转换为二进制格式。理解AssetBundle的机制对于实现高效的热更新、减少资源冗余、优化加载性能具有重要价值,广泛应用于游戏开发、竞品分析、技术研究等场景。本文聚焦AssetBundle解包这一实践需求,系统介绍如何利用AssetStudio、UABE等主流工具进行资源提取与可视化分析,并深入探讨通

weixin_28192383的博客 347

ffmpeg在windows的安装、合并、切片、.m4s、.m3u8处理

自己处理视频,我用的工具是 ffmpeg,因为涉及到.m3u8格式和.m4s格式的一些操作。ffmpeg的介绍我就不多说了,这里是它的官网地址: https://ffmpeg.org/ ,这里是文档: https://ffmpeg.org/documentation.html (看的头大,没咋看下去)...

一只爱吃糖的小羊 2689

【设计模式】建造者模式

建造模式是对象的创建模式。建造模式可以将一个产品的内部表象(internal representation)与产品的生产过程分割开来,从而可以使一个建造过程生成具有不同的内部表象的产品对象。 一。简解建造者模式,相当于是对工厂生产产品的一种装配,由于这种装配可能随时改变,所以需要抽取出来,实现产品局部与整体的解耦(当然话又说回来,单个孤立产品还需要建造者?那就是多此一举。)。着重理解装配的含义,对

小鼠标的博客 8740

微生物16S数据上传NCBI的SRA库

本篇内容仅包括:俺自己的实验收集了淡水、淡水沉积物、海水、海草附着微生物样品,测序所得的Fastq格式数据,在文章投稿发表时被要求数据需上传NCBI的SRA库,得到一个PRJNA2347899这样子的IDs。仅解决了这个上传过程!

Xf_Niu的博客 7433

Java设计模式 —— 【创建型模式】建造者模式(Builder Pattern)详解

建造者模式(Builder Pattern) 又叫生成器模式,是一种对象构建模式;它可以将复杂对象的建造过程抽象出来,使这个抽象过程的不同实现方法可以构造出不同表现的对象。 建造者模式是一步一步创建一个复杂的对象,它允许用户只通过指定复杂对象的类型和内容就可以构建它们,用户不需要知道内部的具体构建细节;由于实现了构建和装配的解耦。不同的构建器,相同的装配,也可以做出不同的对象;相同的构建器,不同的装配顺序也可以做出不同的对象。也就是实现了构建算法、装配算法的解耦,实现了更好的复用。

知唔猪的博客 3384

机器人控制入门

机器人控制入门 对于工科领域来说,脱离实践的学习都是肤浅的,对于控制这种强调经验的技术更是如此。如果去问一个程序员怎么学习一块技术,他必然让你去多编程。机器人领域也是。如果想把基本功打扎实,那么实践更是必不可少了。 机器人控制有三个元素:控制器(算法),执行器(电机),传感器; 控制的本质就是将规划系统的指令作为输入信息,将传感器探测得到的状态信息和导航系统的定位

彼岸花 1万+

C#---第十一课:对列表的各种操作,添加、删除、排序、列表长度、获取元素的索引、FirstOrDefault()、SingleOrDefault()、last()

1.添加元素 2.删除元素 (1)删除列表中指定的元素 (2)删除列表A中所有与列表B相交的元素---常规 (3)删除列表A中所有与列表B相交的元素---lambda 3.排序(正序、倒序) 4.获取列表的最大容量(长度)、已用容量 6.获取元素在列表中的位置(index) 7.判断某元素是否在列表List中 8.获取列表中第一个元素First() & FirstOrDefault() 9.获取列表中唯一元素Single() & SingleOrDefault() 10.获取列表中最后一个元素

Alien-Hu 3625

设计模式-03建造者模式Builder Pattern

建造者模式摘要:建造者模式是一种创建型设计模式,用于分步骤构建复杂对象,使构建过程与对象表示分离。该模式适用于需要创建包含多个组成部分的对象,特别是当这些部分可选或构建顺序可变时。通过UML类图展示了经典建造者模式和链式建造者模式的结构差异,并提供了Java实现示例。实现方式包括通过Builder内部类分步骤设置对象属性,最后通过build()方法返回完整对象,使代码更清晰且避免构造器参数过多的问题。

d3y1`5 81_09 1205

手把手教你用示波器搞定PCIe 5.0 REFCLK时钟信号测量(附完整参数解读)

本文详细介绍了如何使用示波器进行PCIe 5.0 REFCLK时钟信号测量,包括示波器与探头的选择、关键参数的测量方法及解读,以及实战中的常见问题与解决方案。通过手把手教学和完整参数解读,帮助硬件工程师高效完成时钟信号测量,确保系统稳定性。

weixin_28704565的博客 359

建造者模式-Builder Pattern

建造者模式(Builder Pattern)是一种创建型设计模式,它可以让你构建复杂对象时更加灵活和可控。这种模式的主要目的是将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。在软件开发中,我们经常会遇到一些复杂的对象,这些对象通常由多个部分组成,而且每个部分的创建和组合可能需要花费大量的时间和精力。为了解决这个问题,我们可以使用建造者模式来简化对象的构建过程。建造者模式的核心思想是将复杂对象的构建过程分解为多个简单的步骤,每个步骤负责创建一个特定的部分。

jaune162的专栏,最新动态请关注:https://jaune162.blog 1383

uniapp(微信小程序):实现PDF在线预览+在线预览pdf文件完整示例源码,支持文件来源:服务器pdf外链URL预览、调用后端API接口获取PDF文件流二进制下载及解析打开、上传本地PDF文件预览

uni-app实现PDF预览功能,uniapp微信小程序预览PDF,uniapp开发微信小程序在线预览pdf等文件,uniApp微信小程序实现PDF在线预览,Uniapp app在线预览pdf文件流,微信小程序实现pdf预览(苹果安卓兼容),uniapp-微信小程序 实现pdf外链在线预览,uniapp小程序如何做在线预览pdf功能,uniapp小程序端 实现pdf文件预览,微信小程序(uniapp)PDF预览完整实现方案示例demo源码,uni-app预览PDF,小程序pdf预览插件插件,Uniapp微信

✅ 精选推荐文章 4703

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

Builder Pattern 开源项目教程

Builder Pattern 开源项目教程 1. 项目介绍 Builder Pattern 是一个用于实现设计模式中的建造者模式的开源项目。建造者模式是一种创建型设计模式,它允许你一步一步地构建复杂的对象,同时将对象的构建过程与表示分离。这使得同样的构建过程可以创建不同的表示。 该项目提供了一个简单而强大的框架,帮助开发者理解和实现建造者模式。通过该项目,开发者可以学习如何使用建造者模式来构建复...

gitblog_00326的博客 875

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

建造者模式(Builder Pattern)详解

建造者模式是一种创建型设计模式,它允许你分步骤创建复杂对象。该模式允许你使用相同的创建代码生成不同类型和形式的对象。建造者模式的核心思想是将一个复杂对象的构建过程与其表示分离,使得同样的构建过程可以创建不同的表示。建造者模式是一种强大的创建型设计模式,特别适合于构建复杂对象。它将对象的构建过程与表示分离,使得同样的构建过程可以创建不同的表示。在Java中,建造者模式特别有用,可以避免"重叠构造函数"问题,提高代码的可读性和维护性。

yk_dflkg的博客 1862

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

5、建造者模式(Builder Pattern)

建造者模式(Builder Pattern)

qq_38304915的博客 1188

Java设计模式|建造者模式Builder Pattern

Java设计模式|建造者模式Builder Pattern 前言: 在日常生活中,我们可能会遇到这一类型的需求,例如一个实体类里有很多个属性,但是我们只想要其中的几种组合成一个新的对象,这个时候就可以使用建造者模式了,它提供了一种创建对象的最佳方式。建造者模式虽然比较好用,但是大家平时写代码的时候要谨记,不要滥用设计模式,不然的话可能会适得其反啊! 建造者模式 介绍:建造者模式又被称呼为生成器模式,这种类型的设计模式属于创建型模式,使用多个简单的对象一步一步构建成一个复杂的对象,将一个复杂对象的构建与它

QAQFyl的博客 547

设计模式之建造者模式(Builder Pattern)

意图:将一个复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表示。主要解决:主要解决在软件系统中,有时候面临着"一个复杂对象"的创建工作,其通常由各个部分的子对象用一定的算法构成;由于需求的变化,这个复杂对象的各个部分经常面临着剧烈的变化,但是将它们组合在一起的算法却相对稳定。何时使用:一些基本部件不会变,而其组合经常变化的时候。如何解决:将变与不变分离开。关键代码:建造者:创建和提供实例,导演:管理建造出来的实例的依赖关系。

weixin_42294716的博客 1316

建造者模式——Builder Pattern

建造者模式的本质:分离了对象子组件的单独构造(由Builder来负责)和装配(由Director负责装配)。从而构造出复杂的对象:这个模式的适用于:某个对象的构建过程复杂的情况下使用。由于实现了构建和装配的解耦。不同的构建器、相同的装配,也可以做出不同的对象;相同的构建器,不同的装配顺序也可以做出不同的对象。也就是实现了构建算法、装配算法的解耦,实现了更好的复用。 下面参考一下代码看看建造者模式

不会停下学习的脚步,重在思考。 569

Builder Pattern 建造者模式

建造者模式是日常开发中比较常见的设计模式,它的主要作用就是将复杂事物创建的过程抽象出来,该抽象的不同实现方式不同,创建出的对象也不同。通俗的讲,创建一个对象一般都会有一个固定的步骤,这个固定的步骤我们把它抽象出来,每个抽象步骤都会有不同的实现方式,不同的实现方式创建出的对象也将不同。举个常见的例子,想必大家都买过车,车的生产或者组装其实就是属于建造者模式,我们知道,车的生产都需要安装发动机,变速箱,底盘等组件。我们可以把这个安装步骤抽象出来,至于到底装哪种发动机,比如宝马还是奔驰就是对该抽象安装步骤的具体实

weixin_40955388的博客 289

Java建造者模式(Builder pattern)

建造者模式又称生成器模式,所属创建型设计模式,它提供了一种最佳的创建对象方式,将多个简单的对象一步一步构建成一个复杂的对象。对于用户而言,无需知道创建过程和内部组成细节,只需直接使用创建好的对象即可。

Elegance never goes out of fashion 2622
上一篇: 在 Java 中替换掉繁杂的 if 语句
下一篇: Java 字符串为何不可变
JFS_Study
博客等级 码龄6年 363粉丝 359原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

打赏作者

JFS_Study

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

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

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

打赏作者

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

抵扣说明:

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

余额充值