设计模式学习——建造者模式

【Cadence】 ADS Dynamic Link使用教程 在Cadence617上使用ADS Dynamic Link 阅读详情



建造者模式

基本介绍

  1. 建造者模式又叫生成器模式,是一种对象构建模式。它可以将复杂对象的建造过程抽象出来(抽象类别),使这个抽象过程的不同实现方法可以构造出不同表现(属性)的对象。
  2. 建造者模式是一步一步创建一个复杂的对象,它允许用户只通过指定复杂对象的类型和内容就可以构建它们,用户不需要知道内部的具体构建细节。

建造模式的四个角色
  1. Product(产品角色):一个具体的产品对象。
  2. Builder(抽象建造者):创建一个Product对象的各个部件指定的接口。
  3. ConcreteBuilder(具体建造者):实现接口,构建和装配各个部件。
  4. Director(指挥者):构建一个使用Builder接口的对象。它主要是用于创建一个复杂的对象,它主要有两个作用,一时:隔离了客户与对象的产生过程,二是:负责控制产品对象的生产过程。

建造者模式类图实例

在这里插入图片描述

建造者模式java代码实例

House ——>角色:Product 产品角色

public class House {
    private String baise;
    private String wall;
    private String roofed;

    public String getBaise() {
        return baise;
    }

    public void setBaise(String baise) {
        this.baise = baise;
    }

    public String getWall() {
        return wall;
    }

    public void setWall(String wall) {
        this.wall = wall;
    }

    public String getRoofed() {
        return roofed;
    }

    public void setRoofed(String roofed) {
        this.roofed = roofed;
    }
}

HouseBuilder ——>角色:Builder 抽象建造者

public abstract class HouseBuilder {

    protected House house=new House();

    public abstract void buildBasic();

    public abstract void buildWalls();

    public abstract void roofed();

    public House buildHouse(){
        return house;
    }
}

HighBuilding ——>角色:ConcreteBuilder 具体建造者

public class HighBuilding extends HouseBuilder {
    @Override
    public void buildBasic() {
        System.out.println("高楼的打地基100米");
    }

    @Override
    public void buildWalls() {
        System.out.println("高楼的砌墙20cm");
    }

    @Override
    public void roofed() {
        System.out.println("高楼的透明屋顶");
    }
}

CommonHouse ——>角色:ConcreteBuilder 具体建造者

public class CommonHouse extends HouseBuilder {
    @Override
    public void buildBasic() {
        System.out.println("普通房子打地基5米");
    }

    @Override
    public void buildWalls() {
        System.out.println("普通房子砌墙10cm");
    }

    @Override
    public void roofed() {
        System.out.println("普通房子屋顶");
    }
}

HouseDirector ——>角色:Director指挥者

public class HouseDirector {

    HouseBuilder houseBuilder = null;

    //构造器注入
    public HouseDirector(HouseBuilder houseBuilder) {
        this.houseBuilder = houseBuilder;
    }
    //setter方法注入

    public void setHouseBuilder(HouseBuilder houseBuilder) {
        this.houseBuilder = houseBuilder;
    }

    public House buildHouse() {
        houseBuilder.buildBasic();
        houseBuilder.buildWalls();
        houseBuilder.roofed();
        return houseBuilder.buildHouse();
    }
}

建造者模式在JDK的应用和源码分析

  1. java.lang.StringBuilder中的建造者模式
  2. 代码说明

编写测试用例

public class Builder {
    public static void main(String[] args) {
        StringBuilder stringBuilder = new StringBuilder("hello,world");
        System.out.println(stringBuilder);
    }
}

追踪StringBuilder,进入StringBuilder源码,查看StringBuilder类继承了AbstractStringBuilder类;
在这里插入图片描述
追踪AbstractStringBuilder类,发现其本身虽然是Abstract抽象类,但是其并非具有抽象方法,而是由其实现接口Appendable所定义的抽象方法。
在这里插入图片描述
从Appendable接口中,我们发现作为Build的并不是抽象类而是接口,由此得知,建造者模式是一种思想,其作为Build可以为抽象类或者接口来将复杂对象的建造过程抽取出来,而由其子类继承实现其特性。
在这里插入图片描述
附录抽象类里实现Appendable接口重写的append方法。
在这里插入图片描述

源码中建造者模式角色分析
  • Appendable接口 定义了多个append方法(抽象方法),即Appendable为抽象建造者,定义了抽象方法。
  • AbstractStringBuilder 实现了Appendable 接口方法,这里的AbstractStringBuilder 已经是建造者,只是不能实例化
  • StringBuilder即充当了指挥者角色,同时充当了具体的建造者,建造方法的实现是由AbstractStringBuilder 完成,而StringBuilder继承了AbstractStringBuilder

建造者模式的注意事项和细节

  1. 客户端(使用程序)不必知道产品内部组成的细节,将产品本身与产品的创建过程解耦,使得相同的创建过程可以创建不同的产品对象。
  2. 每一个具体建造者都相对独立,而与其他的具体建造者无关,因此可以很方便地替换具体建造者或增加新的具体建造者,用户使用不同的具体建造者即可得到不同的产品对象。
  3. 可以更加精细的控制产品的创建过程。将复杂产品的创建步骤分解在不同的方法中,使得创建过程更加清晰,也更加方便使用程序来控制创建过程。
  4. 增加新的具体建造者无须修改原有类库的代码,指挥者类针对抽象建造者类编码,系统扩展方便,符合“开闭原则”。
  5. 建造者模式所创建的产品一般具有较多的共同点,其组成部分相似,如果产品之间的产异性很大,则不适合使用建造者模式,因此其使用范围受到一定的限制。
  6. 如果产品的内部变化复杂,可能会导致需要定义很多具体建造者类来实现这种变化,导致系统变得很庞大,因此在这种情况下,要考虑是否选择建造者模式。
  7. 抽象工厂模式VS建造者模式
    抽象工厂模式实现对产品家族的创建:一个产品家族是这样的一系列产品,具有不同分类维度的产品组合,采用抽象工厂模式不需要关心构建过程,只关心什么产品由什么工厂生产即可。而建造者模式则是要求按照指定的蓝图建造产品,它的主要目的是通过组装零配件而产生一个新产品。
STM32F429网络通信避坑指南:用CubeMX搞定LAN8720+LWIP+FreeRTOS(附完整代码) 本文详细介绍了STM32F429通过CubeMX配置LAN8720+LWIP+FreeRTOS实现网络通信的避坑指南,涵盖硬件连接、CubeMX配置、LWIP优化及调试技巧,提供完整代码和实战经验,帮助开发者高效解决以太网通信中的常见问题。 阅读详情

相关推荐

手把手教你用Simulink搭建交流异步电机矢量控制模型(附完整仿真文件)

本文提供了一份详细的Simulink仿真指南,手把手教你从零开始搭建交流异步电机矢量控制模型。内容涵盖主电路搭建、坐标变换实现、双闭环PI调节器设计、转子磁链观测器调试等核心步骤,并附有完整的仿真文件,帮助读者跨越理论到实践的鸿沟,掌握高性能电机控制系统的建模与仿真技能。

pz890123的博客 665

Java设计模式之建造者模式

建造者模式: 通过建造者配置参数或内容,最后进行对象的构建。使用场景:步骤一:创建手机产品类 步骤二:抽象builder类 步骤三:具体builder类 步骤四:创建指挥者类 使用测试 4. 简化系统结构 使用测试 举例: 改进:...

Aslixzhou 424

物联网 Mixly-智能楼道灯

一、实验目的及要求 熟悉声音及人体红外传感器用法。 二、实验原理与内容 1.使用声音传感器实现声控灯功能。 2.使用人体红外传感器实现人体检测控制灯功能。 三、实验软硬件环境 硬件:Arduino、LED灯、声音传感器、人体红外传感器 软件:Mixly IDE 四、实验过程(实验步骤、记录、数据、分析) 核心代码截图 声控灯: 人体红外检测灯: 3.实验效果图: (1)、声控灯总线连接: (1)、声控灯声音大于一某个值时灯亮,经过2秒后灯灭: (3)、人体红外检测灯连接总线: (4)、人体红外

qq_43430810的博客 1917

Java设计模式——建造者模式

首先引入一个需求:盖房项目 需求: 需要建房子:这一过程为打桩、砌墙、封顶 房子有各种各样的,比如普通房、高楼、别墅,各种房子的过程虽然一样,但是要求不是相同的 传统方式解决盖房需求 类图结构如下: 代码实现: ...

m0_46925568的博客 175

最优化方法 25:PDHG

前面的章节要么从原始问题出发,要么从对偶问题出发,通过求解近似点或者一个子优化问题进行迭代,而且推导过程中我们发现根据问题的参数特征,比如矩阵 AAA 是瘦高型的还是矮胖型的,采用对偶和原始问题的复杂度会不一样,可以选择一个更简单的。而这一节,我们将要从原始对偶问题出发来优化,什么是原始对偶问题呢?就是原始优化变量和对偶优化变量(原始函数和共轭函数)混合在一块,看下面的原理就知道了。 1. 原始对偶问题 现在考虑原始优化问题,其中 f,gf,gf,g 为闭凸函数 min⁡f(x)+g(Ax) \min \q

Glooow的博客 4601

PCIe扫盲(三)

需要特别注意的是,PCIe的Spec中明确规定只有Root有权限发起配置请求(Originate Configuration Requests),也就是说PCIe系统里面的其他设备是不允许去配置其他设备的配置空间的,即peer-to-peer的配置请求是不允许的。当配置请求进行BDF路由的时候,正是依靠这些信息来确定要找的设备的。前面的文章还介绍过,Root和Switch的每一个端口中都包含一个P2P桥,并且知道桥的配置空间头(Configuration Space Header)是Type1型的。

Liuqz2009的专栏 2402

java 建造者模式的实际应用场景

开头日常吹牛 我想大家在平时写代码的过程中肯定会去想这个类我怎么写简洁点,或者后面容易维护些.毕竟项目一大起来,代码量上去了以后,就算之前写的时候有写注释,但回过头来看总是需要再捋一遍,这就很浪费时间,毕竟大家都不想拿自己的下班时间来加班,程序员要懒一点好.这个时候设计模式的应用开始变得重要起来.在这里给大家安利一点小小的设计模式 关于设计模式,社区里已经很多人写过,也有更清楚更详细的介绍,总...

Arthurs_L的博客 5517

网络协议——Modbus-RTU

网络协议——Modbus-RTU,简介、消息格式、Modbus寄存器种类说明、功能码01H、功能码02H、功能码03H、功能码04H、功能码05H、功能码06H、功能码0FH、功能码10H。

计算机硕士的博客 9902

设计模式(4):建造者模式及其在Java中的应用实例

1、什么是建造者模式? (1)模式定义: 建造者模式(Builder Pattern)使用多个简单的对象一步一步构建成一个复杂的对象。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。一个 Builder 类会一步一步构造最终的对象。该 Builder 类是独立于其他对象的。 或者说:建造者模式将一个复杂对象的创建与它的表示分离,使得同样的构建过程可以创建不同的表示。 建造者模式示例类图 2、建造者模式特性 (1)意图: 将一个复杂的构建与其表示相分离,使得同样的构建过程可以

qq_41969790的博客 769

【11】GD32H7xx MPU记录

GD32H7xx系列MPU内存保护单元模块的使用记录

madao1234的博客 877

超简单五步实现VOS3000客户端呼入配置

1.查看SIP代理  在注册管理中查看自己线路注册的SIP代理IP地址,记录下来。 2.创建普通账户  创建一个呼入使用的普通账号,选择“计费费率”,根据自己情况选择费率,这里做测试就配置了免费的费率,如果费率不是免费,需要给这个普通账户充值。 3.新建对接网关 新建一个对接网关,点击该网关的“补充设置”,选择“网关类型”为静态IP,然后在IP地址栏填上刚才在注册管理里面记录的SIP代...

非著名运维的博客 1万+

认真学习设计模式之建造者模式(Builder Pattern)

# 【1】概述 **建造者模式(Builder Pattern) 又叫生成器模式,是一种对象构建模式**。它可以将复杂对象的建造过程抽象出来(抽象类别),使这个抽象过程的不同实现方法可以构造出不同表现(属性)的对象。 建造者模式是一步一步创建一个复杂的对象,它允许用户只通过指定复杂对象的类型和内容就可以构建它们,用户不需要知道内部的具体构建细节。 **建造者模式的四个角色** * Product(产品角色): 一个具体的产品对象。 * Builder(抽象建造者): 创建一个Product 对象的各

小小默:进无止境 3686

第一篇:APS智能排产理论核心与求解器选型指南

本文系统解析了APS(高级计划与排程)系统的核心功能与技术实现。APS作为融合生产计划与排程的智能决策系统,通过运筹优化算法实现全局最优,平衡交付与效率。重点探讨了混合整数线性规划(MILP)在APS中的应用,包括设备分配、生产批量和人员班次优化等场景,并分析了其局限性与其他算法(如启发式算法)的互补性。文章还提供了APS实施策略建议和优化建模技巧,强调从简单模型开始迭代验证的重要性。最后介绍了甘特图在APS中的多维可视化作用,包括计划调整和决策支持功能。全文为理解APS系统原理及实践应用提供了全面指导。

算法工程师 544

设计模式 - 学习笔记 - 建造者模式Builder Pattern

设计模式 - 学习笔记 - 建造者模式Builder Pattern学习总结动机 Motivation要点总结应用场景UML代码示例1. 手工打造2. 使用 lombok的 @Builder2.1. 默认值2.2. 必填项2.3. Demo参考资料 学习总结 属于对象创建模式。 与工厂的区别在于工厂更关心得到产品,建造者更重视建造过程。 动机 Motivation 在软件系统中,有时候面临着“一个复杂对象”的创建工作,其通常由各个部分的子对象用一-定的算法构成;由于需求的变化,这个复 杂对象的各个部分

灵台方寸山斜月三星洞 570

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

尚硅谷设计模式学习(6)---[建造者模式(Builder Pattern)]

尚硅谷传送门==>B站尚硅谷Java设计模式 ❤❤❤感谢尚硅谷❤❤❤ 最近开始计划学习一下设计模式了,加油!!! 目录

从零开始的异世界JAVA学习 413

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

设计模式学习笔记八:建造者模式(Builder Pattern)

设计模式学习笔记八:建造者模式(Builder Pattern)       1.概述     意图:将复杂对象的构建与表示分离,是同样的构建过程可以创建过程可以创建不同的表示。需要注意以下几点:     (1)。构建与表示分离:表明生成器模式的结构,构建过程被封装在导航器中,生成器则实现具体的表示。     (2)。同样的构建过程:生成器模式关注的是构建过程,即构建过程是

AlbenXie的博客 498

JavaScript设计模式学习——builder pattern(建造者模式)

个人理解的应用场景 举个例子,比如想要创建各种类型的车的实例,车的类型有很多种,但创建每种类型车的接口定义可能是一样的,就用到了此模式 相关概念的通俗解释 上述例子中接口的定义叫builder 接口到每种类型的车的具体实现叫concrete builder 真正用于创建车的类叫director 实现模式的思路 1.首先要定义builder的接口 2.然后各个concretebuilder类去实...

weixin_30567225的博客 176

设计模式学习——建造者模式(Builder Pattern)/生成器模式

// 产品(Product)角色 // 首先是房子类,主要是需要描述一下房屋属性 public classRoom{ private Stringwindow; private Stringfloor; } // 建造者(Builder)角色 // 工人接口,定义了各个工人所要进行的工作。负责进行具体部件如窗户,地板的建造。

古语云 578

java设计模式学习之【建造者模式】

这篇教程不仅提供了建造者模式的理论基础,还通过具体的Java代码示例展示了如何实现和应用这种模式。简单理解,通俗易懂

qq_33129875的博客 1665

JAVA设计模式——建造者模式学习心得

Builder模式:为了构造复杂的对象,提升代码的可读性以及可维护性而创造的一种设计模式,在安卓开发中使用很多。         在构造一个对象时一般有两种方法:            ①定义私有的成员变量,提供set/get方法;            ②定义多参数的有参构造器,通过有参构造实例化不同参数需求的对象。   有参构造的缺点很明显,在属性较多时需要提供大量有参构造,且可读...

malaganguo的博客 791

设计模式之建造者模式学习

什么是建造者模式 建造模式也叫做建造者模式或者生成器模式。 建造模式是一种对象创建型模式之一,用来隐藏复合对象的创建过程,它把复合对象的创建过程加以抽象,通过子类继承和重载的方式,动态地创建具有复合属性的对象。 复合对象就是指一个对象其属性是其他对象的引用,也就是说复合对象是由一些对象组合起来的对象。 例如:房子对象是由屋顶对象、地板对象、墙壁对象的组合。 建造者模式的角色 1、 产品角色(Pr...

Arrset的博客 260

学习设计模式之建造者模式

文章目录一、定义二、问题背景三、违背设计模式的设计实现四、问题改进五、总结 一、定义 建造者模式的核心目的是通过使用多个简单对象一步步地构建出一个复杂对象,通过控制操作台,一步步地组装出坦克。 例如,《王者荣耀》游戏的初始化界面有道路、树木、野怪和守卫塔等。 换一个场景选择其他模式时,同样会建设道路、树木、野怪和守卫塔等,但是它们的摆放位置和大小各有不同。 这种初始化游戏元素的场景就可以使用建造者模式。 这种根据相同的物料、不同的组装方式产生出具体内容,就是建造者模式的最终意图,即将一个复杂的构建与其表示

南淮北安的博客 609

设计模式学习笔记(五):建造者模式【Builder Pattern】(三)问题引申

接着上面的分析。加入

学习点滴的专栏 567

Android开发学习笔记之设计模式——原型模式&建造者模式

文章目录Android开发学习笔记之设计模式——原型模式&建造者模式原型模式概述应用场景优缺点实现建造者模式概述应用场景优缺点实现 Android开发学习笔记之设计模式——原型模式&建造者模式 原型模式 概述 在开发过程中,我们经常会遇到这样的问题,如果我们想要创建一个非常复杂的对象,那我们可能需要进行相当多的处理,尤其是数据类,通常都存在很多成员变量,而其中很多变量还是需要通过I/O操作获取的,此时创建一个新的对象的成本就显得很高了。此时,我们或许会想,如果存在一种方法可以复制原有的对象就

qq_36425800的博客 504

学习《图说设计模式》建造者模式

图说设计模式之建造者模式 1. 模式动机 无论是在现实世界中还是在软件系统中,都存在一些复杂的对象,它们拥有多个组成部分,如汽车,它包括车轮、方向盘、发送机等各种部件。而对于大多数用户而言,无须知道这些部件的装配细节,也几乎不会使用单独某个部件,而是使用一辆完整的汽车,可以通过建造者模式对其进行设计与描述,建造者模式可以将部件和其组装过程分开,一步一步创建一个复杂的对象。用户只需要指定复杂对象的类型就可以得到该对象,而无须知道其内部的具体构造细节。 在软件开发中,也存在大量类似汽车一样的复杂对象,它们拥有一

Orange_Wu的博客 531
上一篇: 设计模式学习——原型模式
下一篇: 设计模式学习——适配器模式
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值