GoF设计模式(四) - 建造者模式

GoF设计模式——建造者模式 阅读详情

前言

建造者(Builder)模式,又叫生成器模式。建造者模式可以将一个产品的内部表象与产品的生成过程分割开来,从而可以使一个建造过程生成具有不同的内部表象的产品对象。如果我们用了建造者模式,那么用户就只需指定需要建造的类型就可以得到它们,而具体建造的过程和细节就不需知道了。

建造者模式的四个角色
1)Product(产品角色):一个具体的产品对象。【提供产品属性以及set、get方法】
2)Builder(抽象建造者):创建一个Product对象的各个部件指定的接口/抽象类。【定义成品需要的材料】
3)ConcreteBuilder(具体建造者):实现接口,构建和装配各个部件。【提供构建产品的具体材料】
4)Director(指挥者):构建一个使用Builder接口的对象。它主要是用于创建一个复杂的对象。它主要有两个作用,一是:隔离了客户与对象的生产过程,二是:负责控制产品对象的生产过程。

【提供构建产品的顺序(封装过程)】

 

例如 生产一台电脑所需要的硬件有主板、CPU、显卡、内存条等等 ,不同品牌都是需要这些硬件集成,例如没有主板电脑是用不了的,只是型号规格出厂商不一致,但总的属性是一样的

1. 产品角色

@Data
public class Computer {
    //cpu
    private String cpu;
    //主板
    private String board;
    //显卡
    private String card;
    //风扇
    private String fan;
    //内存
    private String memory;

}

2. 抽象建造者

public abstract class ComputerBuilder {
    private Computer computer = new Computer();

    /**
     * 构建CPU
     */
    public abstract void buildCpu();
    /**
     * 构建主板
     */
    public abstract void buildBoard();
    /**
     * 构建显卡
     */
    public abstract void buildCard();
    /**
     * 构建风扇
     */
    public abstract void buildFan();
    /**
     * 构建内存
     */
    public abstract void buildMemory();

    /**
     * 当各环节构建完成后就可以出厂了
     */
    public Computer buildComputer(){
        return computer;
    }
}

3. 具体建造者(戴尔电脑)

public class ConcreteDellBuilder extends ComputerBuilder{
    @Override
    public void buildCpu() {
        System.out.println("构建戴尔CPU");
    }

    @Override
    public void buildBoard() {
        System.out.println("构建戴尔主板");
    }

    @Override
    public void buildCard() {
        System.out.println("构建戴尔显卡");
    }

    @Override
    public void buildFan() {
        System.out.println("构建戴尔风扇");
    }

    @Override
    public void buildMemory() {
        System.out.println("构建戴尔内存");
    }
}

4. 具体建造者(MAC)

public class ConcreteMacBuilder extends ComputerBuilder{
    @Override
    public void buildCpu() {
        System.out.println("构建MAC CPU");
    }

    @Override
    public void buildBoard() {
        System.out.println("构建MAC 主板");
    }

    @Override
    public void buildCard() {
        System.out.println("构建MAC 显卡");
    }

    @Override
    public void buildFan() {
        System.out.println("构建MAC 风扇");
    }

    @Override
    public void buildMemory() {
        System.out.println("构建MAC 内存");
    }
}

5. 指挥者

@AllArgsConstructor
@Setter
public class ComputerDirector {
    private ComputerBuilder computerBuilder;

    /**
     * 以怎样的顺序构建ComputerBuilder,交给指挥者方法
     * 动态指定构建流程
     */
    public Computer computerConductor(){
        computerBuilder.buildBoard();
        computerBuilder.buildCard();
        computerBuilder.buildCpu();
        computerBuilder.buildFan();
        computerBuilder.buildMemory();

        return computerBuilder.buildComputer();
    }
}

6. 测试

@SpringBootTest
class BuilderDemoApplicationTests {

	@Test
	void contextLoads() {
		ComputerBuilder computerBuilder = new ConcreteDellBuilder();

		ComputerDirector computerDirector = new ComputerDirector(computerBuilder);
		Computer computer = computerDirector.computerConductor();
	}

}

运行结果

源码: https://download.youkuaiyun.com/download/javanbme/17490645

 


 

Veristand自动化测试:Stimulus Profile Editor实战指南 本文是Veristand自动化测试中Stimulus Profile Editor的实战指南。详细介绍了如何利用这一图形化工具,将繁琐的手动测试流程转化为一键自动执行的“剧本”,涵盖工程控制、信号编程、预制动作调用等核心功能,并通过手把手案例演示了构建首个自动化测试脚本的全过程,帮助测试工程师显著提升效率与可靠性。 阅读详情

相关推荐

从稀疏表示到低秩表示(一)

确定研究方向后一直在狂补理论,最近看了一些文章,有了些想法,顺便也总结了representation系列的文章,由于我刚接触,可能会有些不足,愿大家共同指正。 从稀疏表示到低秩表示系列文章包括如下内容: 一、 sparse representation 二、 一、 sparse representation 1  sparsity  一个线性表示解决的问题如下图所示:

彼岸花 3万+

GOF之建造者模式(创建型模式)附图详解 ✨ 每日积累

建造者模式是什么 ​ 建造者模式属于创建型设计模式,它提供了一种创建对象的最佳方式,使用多个简单的对象一步一步构建成一个复杂的对象,在用户不知道建造过程和细节的情况下直接创建复杂的对象。调用这只修奥给出指定复杂对象的类型和内容,建造者复杂按照顺序创建复杂对象。例如用户购买笔记本:用户并不需要知道笔记本组成的细节以及如何组装,只需要告诉需要购买的牌子和配置即可。 建造者模式的优缺点 优点 ​ 产品的建造和表示分离,实现解耦。客户端不需要知道内部的组成和建造细节。 ​ 将复杂产品的创建过程分解在不同的方法

龙飞的博客 6995

通达信波段交易公式实战:如何用副图指标精准捕捉买卖点(附完整源码)

本文深入解析通达信波段交易副图指标的构建与应用,提供完整源码实现,帮助投资者精准捕捉买卖点。通过趋势强度度量、超买超卖判断及信号过滤机制,结合K线图分析,有效提升波段交易的成功率。

weixin_29306317的博客 606

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

一个人活到70岁以上,都会经历这样的几个阶段:婴儿,少年,青年,中年,老年。并且每个人在各个阶段肯定是不一样的呀,我觉得可以说世界上不存在两个人在人生的这5个阶段的生活完全一样,但是活到70岁以上的人,都经历了这几个阶段是肯定的。实际上这是一个比较经典的建造者模式的例子了。 1.初识建造者模式 建造者模式实际上是常用的设计模式。顾名思义,builder的意思是建造者或者建筑工人,谈到建

继续微笑lsj 1674

华为AC外置Portal认证方案配置步骤指南

华为AC外置Portal认证方案配置步骤指南

m0_46129105的博客 7673

C++语言程序设计教程第4版杨进才沈显君课后习题答案解析

为了更好地学习这门课程,我尝试在网上寻找一些学习资料和参考书籍,但效果并不是很理想。因此,我希望能有一些学长学姐或者是有经验的程序员能够分享一些学习经验和方法,让我更好地掌握这门课程。学习过程中,我发现这本书的内容非常丰富,讲解也非常详细,对于像我这样编程基础薄弱的学生来说,是一本非常实用的教材。同时,我也希望有经验的程序员能够推荐一些适合初学者的C++语言学习资料和工具,以便我能更好地学习和掌握这门课程。总之,希望能得到大家的帮助和支持,让我更好地学习和掌握C++语言程序设计。主 编: 杨进才,沈显君。

weixin_58833001的博客 1332

GOF设计模式-建造者模式(builder)

建造者模式(builder),将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。Dirextor: 指挥者类,用于统一组装流程 Builder:抽象Builder类,规范产品的组建,一般是由子类实现。 DFCarBuilder: 抽象Builder类的实现类,实现抽象Builder类定义的所有方法,并且返回一个组建好的对象 Car:产品类 举个建造汽车的例子,现在要建造一辆汽

小布的世界 818

WPT无线电能传输公式推导、编程计算、仿真验证全过程

主要分为5大模块,分别为无补偿,SS,SP,PP,PS,每个模块对应有公式推导,matlab编程计算相关参数以及将计算参数和仿真验证观察是否对应。采用matlab编程计算参数以及simulink仿真验证

zzhao2580的博客 7755

GOF23设计模式之建造者模式(builder)

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

dcpvpf6917的博客 256

使用Gitlab 搭建私有镜像仓库(外置Nginx)

为了让团队尽快使用Gitlab的CI进行工作,必须做好Gitlab的初始化工作,大家都知道拉取镜像由于某些原因,会比较慢,因此构建自己的私有镜像仓库就成为了关键的一步。当然私有镜像仓库的搭建有很多种方式,这里直接使用Gitlab提供的镜像仓库功能。一揽子解决方案比较香。gitlab真的越来越好用了,有了这个镜像仓,也没必要再使用三方的镜像仓库了。Devops 真好用!

网尘的技术专栏 1829

【虚幻引擎UE】UE5 阴影异常与优化

【虚幻引擎UE】UE5 阴影异常与优化解决方案合集

灵境引路人 3万+

GOF设计模式-创建型模式-建造者模式

复杂对象的组装与创建-建造者模式 没有人买车会只买一个轮胎或者方向盘,大家买的都是一辆包含轮胎、方向盘和发动机等多 个部件的完整汽车。如何将这些部件组装成一辆完整的汽车并返回给用户,这是建造者模式 需要解决的问题。建造者模式又称为生成器模式,它是一种较为复杂、使用频率也相对较低 的创建型模式。建造者模式为客户端返回的不是一个简单的产品,而是一个由多个部件组成 的复杂产品。 软件公司...

yolly 360

信号处理仿真:自适应信号处理_(8).自适应信道均衡

在无线通信系统中,信道的多径效应和时变特性会导致信号的失真,从而影响通信质量。自适应信道均衡技术通过实时调整均衡器的参数,以补偿信道失真,提高信号的质量和可靠性。本节将详细介绍自适应信道均衡的原理、算法和实现方法,并通过具体的仿真例子来说明其应用。

2401_87715305的博客 1039

设计模式—建造者模式(完整工程面试详解)

本文讲解了建造者模式分步组装复杂对象的核心思想,详述产品、抽象建造者、具体建造者、指挥者四大标准角色,分别实现经典 GoF 标准建造者与企业主流静态内部链式 Builder 两种方案,梳理 Spring、Guava、JDK 主流框架落地案例,给出企业级选型规范,构建完整创建型建造者模式知识体系。

m0_64388783的博客 295

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

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

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

设计模式系列(一)简介

一:设计模式起源 来自维基百科: https://zh.wikipedia.org/wiki/%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F_(%E8%AE%A1%E7%AE%97%E6%9C%BA) 建筑师克里斯托佛·亚历山大在1977/79年编制了一本汇集设计模式的书,但是这种设计模式的思想在建筑设计领域里的影响远没有后来在软件开发领域里传播的广泛。 肯特·贝...

perfectnihil的博客 285

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

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

设计模式笔记之一概要篇

设计模式的起源 模式之父Christopher Alexander(克里斯托弗﹒亚历山大),哈佛大学建筑学博士,美国加州大学伯克利分销建筑学教授,加州大学伯克利分校环境结构研究所所长,美国艺术和科学院院士等,Charistopher Alexander博士及其研究团队用了约20年的时间,对住宅和周边环境进行大量的调查研究和资料收集工作,发现人们对舒适住宅和城市环境存在一个共同的认同规律,Chri...

ld3205的博客 250

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

设计模式-起源

来源设计模式来自于建筑领域,作为软件工程的一个分支。1995年GOF(Gang Of Four四人组,Erich Gamma、Richard Helm,Ralph Johnson和John Vlissides)收集整理了23种设计模式出版了《设计模式:可复用面向对象软件的基础》一书。(GOF缺少了一个较为常用的设计模式,简单工厂)定义设计模式的英文叫 Desing Pattern,是一套被反复使用...

kxfeng1的专栏 1100

Java设计模式概述

Java设计模式 设计模式介绍 1) 设计模式是程序员在面对同类软件工程设计问题所总结出来的有用的经验, 模式不是代码,而是某类问题的通用解决方案,设计模式(Design pattern) 代表了最佳的实践。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的。 2) 设计模式的本质提高软件的维护性,通用性和扩展性,并降低软件的复杂度。 3) <<...

qq_39368007的博客 129

浅谈GOF设计模式之建造者模式(五)

浅谈GOF设计模式之建造者模式(五)建造者模式的本质二级目录三级目录 建造者模式的本质 1.分离了对象子组件的单独构造(有bulider来负责)和装配(由Director负责)。从而可以构造出复杂的对象:某个对象构建相对复杂的情况下使用。 2.由于实现了构建和装配的解耦。不同的的解耦器,相同的装配,也可以做出不同的对象; 相同的构造器,不同的装配顺序也可以做出不同的对象。也就实现了 构建算法、装配算法的解耦,实现了更好的复用。 二级目录 三级目录 ...

jdycsdn的博客 306

五万字详解“GoF”的23种设计模式

大家好,我是栗筝i,近期我总结梳理了 “GoF”的 23 种设计模式,并使用 Java 对每种设计模式都进行了伪代码与 Demo 实现,并总结了每种设计模式的应用场景,优缺点,UML图等相关内容,字/词数达到了5万,希望对大家有所帮助~~

栗筝i的博客 4167

GoF设计模式:BuliderParttern建造者模式

GoF设计模式:BuliderParttern建造者模式 建造者模式定义:将一个复杂的对象的构建和它的表示分离,使得同样的构建过程可以创建不同的表示。将复杂的对象一步一步的创建。建造者模式包含的角色: Bulider抽象建造者:抽象建造者为一个产品Product对象的各个部件指定抽象接口,如:buliderPartA(),或者是得到一个复杂对象getResult()。 ConcreteBuilde

再见孙悟空 1443

GoF是什么----设计模式

定义:GoF(Gang of Four),中文名——四人组。GoF是一种设计模式。 [编辑本段]GoF的起源  《Design Patterns: Elements of Reusable Object-Oriented Software》(即后述《设计模式》一书),由 Erich Gamma、Richard Helm、Ralph Johnson 和 John Vlissides

wzgccm的专栏 4568

GOF23种设计模式在Java中的应用(part 1)

第二部分:GOF23种设计模式在Java中的应用(part 2) 一、GOF来源及简介 1.1 GOF23种设计模式简介 《Design Patterns: Elements of Reusable Object-Oriented Software》(即后述《设计模式》一书),由 Erich Gamma、Richard Helm、Ralph Johnson 和 John Vlissides...

小蜜蜂1010的博客 1273

GOF设计模式简介

1.简介 设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的。 设计模式是一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了重用代码、让代码更容易被他人理解、保证代码可...

yoyoseng的博客 873

设计模式Python版 建造者模式

介绍了GOF设计模式中的建造者模式,以及用Python实现建造者模式的示例。

分享、交流、合作 1806

【GoF23种设计模式】01_建造者模式

GoF23种经典的开发设计模式。分为三大类:创建型模式、结构型模式和行为型模式。

weixin_48627356的博客 798
上一篇: GoF设计模式(三) - 单例模式的六种写法
下一篇: Spring之ApplicationContextAware的作用
让程序飞
博客等级 码龄10年 8831粉丝 99原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

打赏作者

让程序飞

您的鼓励将是我最大的动力

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

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

打赏作者

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

抵扣说明:

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

余额充值