建造者模式

建造者模式源代码---BuilderDemo.rar 这是一个简单的建造者模式的开发demo,对于想了解设计模式的童靴还是有一定的学习和借鉴的作用。源代码都是经过自己测试,完全可用 立即下载

盖房子的需求:

​  1.建造房子的过程:打桩、砌墙、封顶

​  2.房子是多样的,有普通房、高楼、别墅等。虽然过程一样,但是要求是不同的
 

传统的方法:

在这里插入图片描述
问题:
​  设计的程序结构过于简单,并没有缓存层对象,致使程序的扩展和维护不好。产品和创建房子的过程封装在一起,耦合性较强。

 

建造者模式

​  又叫生成器模式(Builder)

​  它可以分步骤创建复杂对象,该模式允许你使用相同的创建代码生成不同类型和形式的对象。
 

建造者模式结构图

在这里插入图片描述
​  1.生成器 (Builder) 接口声明在所有类型生成器中通用的产品构造步骤。
​  2.具体生成器 (Concrete Builders) 提供构造过程的不同实现。 具体生成器也可以构造不遵循通用接口的产品。
​  3.产品 (Products) 是最终生成的对象。 由不同生成器构造的产品无需属于同一类层次结构或接口。
​  4.主管 (Director) 类定义调用构造步骤的顺序, 这样你就可以创建和复用特定的产品配置。
​  5.客户端 (Client) 必须将某个生成器对象与主管类关联。 一般情况下, 你只需通过主管类构造函数的参数进行一次性关联即可。 此后主管类就能使用生成器对象完成后续所有的构造任务。 但在客户端将生成器对象传递给主管类制造方法时还有另一种方式。 在这种情况下, 你在使用主管类生产产品时每次都可以使用不同的生成器。
 

建造者模式应用场景

​  1.使用生成器模式可避免 “重叠构造函数 (telescopic constructor)” 的出现。
​  2.当你希望使用代码创建不同形式的产品 (例如石头或木头房屋) 时, 可使用生成器模式。
​  3.使用生成器构造组合树或其他复杂对象
 

实现方法

​  1.清晰地定义通用步骤, 确保它们可以制造所有形式的产品。 否则你将无法进一步实施该模式。

​  2.在基本生成器接口中声明这些步骤。

​  3.为每个形式的产品创建具体生成器类, 并实现其构造步骤。

​  不要忘记实现获取构造结果对象的方法。 你不能在生成器接口中声明该方法, 因为不同生成器构造的产品可能没有公共接口, 因此你就不知道该方法返回的对象类型。 但是, 如果所有产品都位于单一类层次中, 你就可以安全地在基本接口中添加获取生成对象的方法。

​  4.考虑创建主管类。 它可以使用同一生成器对象来封装多种构造产品的方式。

​  5.客户端代码会同时创建生成器和主管对象。 构造开始前, 客户端必须将生成器对象传递给主管对象。 通常情况下, 客户端只需调用主管类构造函数一次即可。 主管类使用生成器对象完成后续所有制造任务。 还有另一种方式, 那就是客户端可以将生成器对象直接传递给主管类的制造方法。

​  6.只有在所有产品都遵循相同接口的情况下, 构造结果可以直接通过主管类获取。 否则, 客户端应当通过生成器获取构造结果。

 

生成器模式优缺点

​  优点:
  ​ ✔️你可以分步创建对象, 暂缓创建步骤或递归运行创建步骤。
​  ​ ✔️生成不同形式的产品时, 你可以复用相同的制造代码。
​  ​ ✔️单一职责原则。 你可以将复杂构造代码从产品的业务逻辑中分离出来。
 
​  缺点:
​  ​  ❌ 由于该模式需要新增多个类, 因此代码整体复杂程度会有所增加。

 

更改后的盖房子项目

在这里插入图片描述

代码:

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;
    }
}
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;
    }
}
public class CommonHouse extends HouseBuilder {

    @Override
    public void buildBasic() {
        System.out.println("普通房子打地基");
    }

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

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

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

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

        @Override
        public void roofed() {
            System.out.println("高楼封顶");
        }

}
public class HouseDirector {
    HouseBuilder houseBuilder = null;

    public HouseDirector(HouseBuilder houseBuilder){
        this.houseBuilder = houseBuilder;
    }

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

    public House constructHouse(){
        houseBuilder.buildBasic();
        houseBuilder.buildWalls();
        houseBuilder.roofed();

        return houseBuilder.buildHouse();
    }
}
public class Client {
    public static void main(String[] args) {
        //普通房子
        CommonHouse commonHouse = new CommonHouse();
        HouseDirector houseDirector = new HouseDirector(commonHouse);
        House house = houseDirector.constructHouse();

        System.out.println("------");
        //高楼
        houseDirector.setHouseBuilder(new HighHouse());
        House highHouse = houseDirector.constructHouse();
    }
}

 
建造者模式的注意细节

​ ​  1.使用者不需知道产品内部的细节,将产品本身与产品的创建过程解耦,使用相同的创建过程可以创建不同的产品对象。

​ ​  2.每一个具体建造者都相对独立。

​ ​  3.可以更加精细的控制产品的创建过程。

​ ​  4.增加新的具体建造者无须修改原有的代码。由指挥类针对抽象者类编程,易扩展,符合 开闭原则

​ ​  5.建造者模式的产品有较多的共同点,若差异大,则不适合使用该模式。

​ ​  6.若内部变化复杂,需要定义许多的具体建造者来实现变化,致使系统变得庞大,则需要考虑是否使用该模式。

 

建造者模式与抽象工厂的不同点

​​  关注的侧重点不同。

​  ​ 抽象工厂主要是对产品家族的创建,具有不同维度的产品组合,不需要关系构建过程,只需关心什么工厂生产什么产品。

​​  建造者模式需要按照指定的过程建造产品。主要目的是通过组装零件生产出一个新产品。

java 建造者模式代码 立即下载

相关推荐

设计模式-建造者模式(讲解及其实现代码)

设计模式-建造者模式(讲解及其实现代码)

设计模式之建造者模式

参考链接: https://blog.youkuaiyun.com/zhengzhb/article/details/7375966 https://blog.youkuaiyun.com/u010102390/article/details/80179754 1.盖房项目问题 1)需要建房子:这一过程为打桩、砌墙、封顶 2)房子有各种各样的,比如普通房,高楼,别墅,各种房子的过程虽然一样,但是要求不要相同的....

weixin_30487701的博客 331

设计模式之建造者模式代码示例

设计模式之建造者模式代码示例,

设计模式 -- 建造者模式

文章目录1、盖房项目需求2、传统方式解决盖房需求3、传统方式的问题分析4、建造者模式基本介绍5、建造者模式的四个角色6、建造者模式原理类图7、建造者模式解决盖房需求应用实例8、建造者模式在 JDK 的应用和源码分析9、建造者模式的注意事项和细节 1、盖房项目需求         1)需要建房子:这一过程为打桩、砌墙、封顶         2)房子有各

Syntactic Sugar 391

【Macbook-Latex安装部署教程】【Win-Texlive镜像下载】【简单易上手】MacTex+Vscode/Texstudio

该教程记录自己在mac()上安装部署Latex环境的经验,整个教程操作简单,配置要求少,易上手。教程分成三部分:Mactex下载与安装,Vscode插件下载与配置文件修改,Texstudio安装。

sunriseOvO的博客 2569

MATLAB锂离子电池伪二维(P2D)模型实现

锂离子电池伪二维(P2D)模型的MATLAB实现。该模型基于Newman等人提出的经典电化学模型,考虑了固液相扩散、电荷守恒和电化学反应动力学。

hie98894的博客 1930

创建者模式之建造者模式(附带代码详解)

无论承接什么样的需求,是不是身边总有那么几个人代码写的烂,但是却时常有测试小姐姐过来聊天( 求改bug)、有产品小伙伴送吃的( 求写需求 )、有业务小妹妹陪着改代码( 求上线 ),直至领导都认为他的工作很重要,而在旁边的你只能蹭点吃的。 这样的小伙伴,可能把代码写的很直接, ifelse 多用一点,满足于先临时支持一下,想着这也没什么的。而且这样的业务需求要的急又都是增删改查的内容,实在不想做设计。而如果有人提到说好设计下,可能也会被反对不要过渡设计。 第一次完成产品需求实在是很快,但互联网的代码不..

am的博客 504

[语义分割]SPP、空洞卷积与ASPP总结

ASPP全称:Atrous Spatial Pyramid Pooling,中文可以理解为空洞空间卷积池化金字塔或者多孔空间金字塔池化。在这其中,要理解两个概念:一个是SPP,池化金字塔结构或者叫空间金字塔池化层,都是一个东西;另一个是Atrous,空洞卷积,两个加在一起就是ASPP。 首先说一下SPP:Spatial Pyramid Pooling。这个结构出自于论文《Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Re

lipengfei0427的博客 2万+

设计模式-建造者模式的完整代码示例及测试验证

建造者模式是一种创建型设计模式,也叫生成器模式。封装一个复杂对象构造过程,将复杂对象的创建过程拆分成多个简单对象的创建过程,再进行组合构建出复杂对象,用户只需要指定复杂对象的类型就可以得到该对象,而无须知道其内部的具体构造细节。

xiaofa 1049

3个国产AI大模型实战:如何用DeepSeek+豆包+千问批量生成高质量测试用例(附完整代码)

本文详细介绍了如何利用DeepSeek、豆包和千问三大国产AI大模型批量生成高质量测试用例的实战方法。通过Python环境配置、多模型SDK安装和统一接口封装,实现高效测试用例生成,并结合结构化提示词设计和多模型结果对比分析,显著提升测试效率和覆盖率。

weixin_29197699的博客 710

23.501中英对照(46):5QI到Qos特征的映射

注4:对于UPF终止N6与5G-AN之间的延迟,CN PDB的静态值为1毫秒,应从给定的PDB中减去该值以得出适用于无线接口的分组延迟预算。注5:对于UPF终止N6与5G-AN之间的延迟,CN PDB的静态值为2毫秒,应从给定的PDB中减去该值以得出适用于无线接口的分组延迟预算。注6:对于UPF终止N6与5G-AN之间的延迟,CN PDB的静态值为5毫秒,应从给定的PDB中减去该值以得出适用于无线接口的分组延迟预算。注:建议为任何新的非GBR资源类型的标准化5QI分配小于64的值。

51学通信的博客 1295

建造者模式-代码

建造者模式

qq_37343656的博客 312

自然语言处理NLP星空智能对话机器人系列:Gavin大咖 Transformer 101问答集 第一问

自然语言处理NLP星空智能对话机器人系列:Transformer 101问答 [让天下没有难学的Transformer] 你问我答系列之一 Gavin大咖第一问: Transformer中的可训练Queries、Keys和Values矩阵从哪儿来? 以上是智华解答,供同学们参考。 星空智能对话机器人系列博客 NLP星空智能对话机器人系列:第二次星空智能对话机器人Zoom线上演示安排 NLP星空智能对话机器人系列:StarSpace: Embed All The Things NLP星空智能对

大模型与Agent智能体 991

设计模式—建造者模式及实例(BuilderPattern)

建造者模式(Builder Pattern)也称生成器模式,它属于创建型模式。

小嵩的博客 4002

零基础DSP实战TMS320F28035:第九节,ADC比较器&EPWM

ADC比较器框图如下所示:-电压-----------------------------输出-电压A>电压B------------------ 1-电压A

sinat_30943509的博客 2535

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

建造者模式BuilderPattern

建造者模式BuilderPattern建造者模式简介应用场景:优点:缺点:典型例子:装配电脑。建造者模式结构:四大类产品类抽象建造者类具体建造者类指挥部类 建造者模式简介 一件产品/一个事物,由多个部件组成,这些部件可以自由替换,每个部件都有自己的创建过程,那么需要这个产品的客户端(使用者)可以忽略每个部件的创建过程,或者说使用者不关心你产品每个部件是如何产生的,你只要给我完整的产品就行,至于你各部件怎么建的、建好后又是如何装配成完整产品的,那是你的事,别特么让我知道,我嫌烦。 应用场景: (1) 需要生成

diezhongbing1358的博客 293

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

建造者模式(BuilderPattern)

原文参考出处:https://blog.youkuaiyun.com/u010102390/article/details/80179754 介绍: 建造者模式:指将一个复杂对象的构造与它的表示分离,使同样的构建过程可以创建不同的表示,这样的设计模式被称为建造者模式。它是将一个复杂的对象分解为多个简单的对象,然后一步一步构建而成。它将变与不变相分离,即产品的组成部分是不变的,但每一部分是可...

静风落叶的博客 221

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

设计模式之建造者模式(BuilderPattern)

一.意义 将一个复杂的对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。 说明:复杂对象的构建,比如一个对象有几十个成员属性,那么我们在创建这个对象,并给成员属性赋值时,就会很麻烦。采用建造者模式,就是把创建对象并给成员属性赋值的工作,分离出来,由建造者角色来完成,业务程序员直接调用导演类,获得复杂对象即可,无需再进行对象的创建工作了。 二.角色 建造者模式涉及到一下几种角色: Builder(抽象建造者):它为创建一个产品Product对象的各个部件指定抽象接口,在该接口中一般声明两类方

敲代码的小小酥的博客 415

设计模式——建造者模式(BuilderPattern)

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

雪夜&流星的专栏 571

设计模式之建造者模式BuilderPattern(七)

建造者模式(Builder Pattern)使用多个简单的对象一步一步构建成一个复杂的对象。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。@Data:这是Lombok中提供的Getter和Setter方法和toString方法的注解。@AllArgsConstructor:这是Lombok中提供的包含所有参数的构造方法注解。@NoArgsConstructor:这是Lombok中提供的不包含任何参数的构造方法注解。3、OrderBuilder类。1、OrderItem类。

徐泗空的博客 1331

设计模式建造者模式(BuilderPattern)

核心模块:Builder抽象建造者、ConcreteBuilder具体建造者、Product产品角色、Director指挥者 所有代码请访问:git@code.aliyun.com:289804201/PatternLearn.git 使用场景:构建复杂对象,或者构件过程中需要强制的分布措施; 优点:客户可以精细的控制构建过程,将产品创建过程和产品本省分离,细节依赖于

didiao11300的专栏 293

您的设计模式——建造者模式【Builder Pattern】

又是一个周三,快要下班了,老大突然又拉住我,喜滋滋的告诉我“牛叉公司很满意我们做的模型, 又签订了一个合同,把奔驰、宝马的车辆模型都交给我我们公司制作了,不过这次又额外增加了一个新需 求:汽车的启动、停止、喇叭声音、引擎声音都有客户自己控制,他想什么顺序就什么顺序,这个没问题 吧?”。 看着老大殷切的目光,我还能说啥,肯定的点头, “没问题! ” ,加班加点做呗, “再苦再累就当自己二 百

454

设计模式——建造者模式

又叫生成器模式,是一种对象构建模式。它可以将复杂对象的建造过程抽象出来(抽象类别),使这个抽象过程的不同实现方法可以构造出不同表现(属性)的对象。2)、构造者模式,它允许用户只通过指定复杂对象的类型和内容就可以构建它们,用户不需要知道内部的具体构建细节。3)、构造者模式主要解决在软件系统中,当面临一个复杂对象的创建工作时,其通常由各个部分的子对象用一定的算法构成;由于需求的变化,这个复杂对象的各个部分经常面临剧烈的变化,但是将它们组合在一起的算法却相对稳定。

程序猿进阶 1773

生成器模式/建造者模式(BuilderPattern)

生成器模式/建造者模式(BuilderPattern):通过多个简单对象累积逐步构建成目标复杂的对象。这种设计模式属于创建型模式,提供创建对象的某种方式。 生成器模式/建造者模式的使用:在软件系统中有时候面临”某个极端复杂的对象"的创建需求,其通常由各个部分的子对象(部件对象)采用一定的算法构成;由于极端复杂需求的变化,这个极端复杂对象的各个部分经常面临着剧烈的变化,但是将各个部件组合在一起的逻辑算法却相对稳定。 基本的部件对象本身不会变但部件的组合经常变化时。 生成器(建造者)模式优点:建造者独立,易扩展

yanhaijunyan的博客 281
上一篇: 工厂方法模式&&抽象工厂模式
下一篇: 原型模式&clone的学习
code_Floyed
博客等级 码龄7年 3粉丝 56原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值