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

全网最通俗易懂的建造者(Builder)设计模式 使用场景 首先要明白建造者模式是一种创建对象的设计模式。 适用于一个类中有很多属性参数,且当其他地方构建这个类对象的时候又不是所有属性都要用到的时候(这个后面会解释) 抛出问题 来不及解释了,直接上代码。 public class Student { //姓名 private String mName; //年龄 private int mAge; //专业 private String mSubject; //学历 private Strin 阅读详情

       这里我们先来声明一下,建造者模式(Builder)也叫生成器模式,也就是说他们两个只是在叫法上稍有不同,指向的其实是一种模式,这个大家了解一下就好,建造者模式将一个复杂的对象的构建与它的表示相分离,使得同样的构建过程可以创建不同的表示,具体来说就是,它将客户端与包含多个组件部分的复杂对象的创建过程分离,客户端无需知道复杂对象的内部组成部分与装配方式,只需要知道所需建造者的类型即可,它关注如何一步一步创建一个复杂的对象,不同的具体建造者定义了不同的创建过程,且具体建造者相互独立,这样增加新的建造者就显得非常方便,无须修改已有代码,使系统具有较好的扩展性,这也是设计模式的一种常用思想,接下来我们就来具体看看建造者模式


一、定义


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


二、使用场景

  • 当构造过程必须允许被构造对象有不同的表示时
  • 相同的方法,不同的执行顺序,产生不同结果时
  • 将多个零部件装配到一个对象中
  • 当初始化一个对象特别复杂,如参数多,且很多参数都具有默认值时

三、模型图


四、Builder 模式的简单实现

       这里我们也采用大家通用且特别容易理解的组装电脑这个复杂过程来讲述,计算机的组装过程较为复杂,并且组装顺序也是不固定的,为了便于理解,我们把计算机的组装过程简化为构建主机,设置操作系统,设置显示器 3 个部分,然后通过 Director 和具体的 Builder 来构建计算机对象

1. 计算机抽象类,即 Product 角色

/**
 * 计算机抽象类,即 Product 角色
 * 
 * @author qiudengjiao
 */
public class Computer {

	protected String mHost;
	protected String mDisplay;
	protected String mOS;

	public Computer() {
	}

	/**
	 * 设置主机
	 * 
	 * @param host
	 */
	public void setHost(String host) {
		this.mHost = host;
	}

	/**
	 * 设置显示器
	 * 
	 * @param display
	 */
	public void setDisplay(String display) {
		this.mDisplay = display;
	}

	/**
	 * 设置操作系统
	 * 
	 * @param OS
	 */
	public void setOS(String OS) {
		this.mOS = OS;
	}

	@Override
	public String toString() {
		return "Computer [mHost=" + mHost + ", mDisplay=" + mDisplay + ", mOS=" + mOS + "]";
	}
}


2. 创建 Builder 类

这里提供了一套模板,提供了设置主机,显示器,操作系统的方法,以及组装成电脑的 create() 方法


/**
 * 抽象Builder类
 * 
 * @author qiudengjiao
 */
public abstract class Builder {
	//设置主机
	public abstract void buildHost(String host);
	//设置显示器
	public abstract void buildDisplay(String display);
	//设置操作系统
	public abstract void buildOS(String OS);
	//创建Computer
	public abstract Computer create();
}

3. 实现了抽象的 Builder 类,ComputerBuilder 类用于组装电脑:

/**
 * 实现了抽象的Builder类,ComputerBuilder类用于组装电脑
 * 
 * @author qiudengjiao
 */
public class ComputerBuilder extends Builder {
	
	 private Computer mComputer = new Computer();

	@Override
	public void buildHost(String host) {
		mComputer.setHost(host);
	}

	@Override
	public void buildDisplay(String display) {
		mComputer.setDisplay(display);
	}

	@Override
	public void buildOS(String OS) {
		mComputer.setOS(OS);
	}

	@Override
	public Computer create() {
		return mComputer;
	}
}

4. Director类 负责构造 Computer


/**
 * Director类,负责构造 Computer
 * 
 * @author qiudengjiao
 *
 */
public class Director {

	Builder mBuilder = null;

	public Director(Builder builder) {
		this.mBuilder = builder;
	}

	/**
	 * 构建对象
	 * 
	 * @param host
	 * @param display
	 * @param OS
	 * @return
	 */
	public Computer construct(String host, String display, String OS) {

		this.mBuilder.buildHost(host);
		this.mBuilder.buildDisplay(display);
		this.mBuilder.buildOS(OS);
		return mBuilder.create();
		
	}
}

5. 到这里我们就能来组装我们的电脑了

/**
 * 测试电脑组装类
 * 
 * @author qiudengjiao
 */
public class CreatComputer {

	public static void main(String[] args) {
		
		Builder mBuilder = new ComputerBuilder();
		Director mDirecror = new Director(mBuilder);
		// 组装电脑
		mDirecror.construct("联想", "三星显示器", "OS系统");
		System.out.println(mBuilder.create().toString());
	}
}


6. 我们来看一下打印情况



       今天就写到这里,我们只是比较简单的介绍了下建造者模式的构建流程,更多详细深入的理解还需要大家去看源码中的使用,但是道理都是一样的



ThingsKit物联网平台产品管理之物模型 物模型是ThingsKit物联网平台为产品定义的数据模型,用于描述产品的功能。本文介绍物模型相关概念和使用限制。 阅读详情

相关推荐

如何在iPhone上本地运行SmolVLM?5亿参数模型实战指南(附Swift代码)

本文详细介绍了如何在iPhone上本地部署和运行轻量高效的SmolVLM多模态模型。通过实战指南,分享了使用Swift和MLX框架进行环境配置、模型加载、内存优化以及实现实时图像分析与文本生成的完整流程,帮助开发者在移动端高效运行AI视觉语言模型。

echo99的专栏 654

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

建造者模式是一种创建型设计模式,它将一个复杂对象的构建过程与其表示分离,使得同样的构建过程可以创建不同的表示。该模式的核心思想是将对象的构建过程封装在一个独立的Builder类中,通过一步一步地调用Builder类的方法来构建对象,最终返回构建好的对象。建造者模式是一种创建型设计模式,它将一个复杂对象的构建过程与其表示分离,使得同样的构建过程可以创建不同的表示。建造者模式(Builder Pattern):将一个复杂对象的构建过程与其表示分离,使得同样的构建过程可以创建不同的表示。

[Blog][Domain] programb.blog.youkuaiyun.com 622

黑金ZYNQ7010开发板开箱实测:从接线到串口通信的保姆级指南

本文提供黑金ZYNQ7010开发板从开箱到串口通信的完整实操指南。详细介绍了硬件连接、驱动安装、启动模式设置及串口终端配置等关键步骤,并针对常见问题提供排查思路,帮助FPGA开发者快速上手ZYNQ平台,建立稳定的调试通道。

weixin_29266749的博客 466

python 设计模式(四) 建造者模式(builder design pattern)

建造者模式     我们想要创建一个有多个部分构成的对象, 而且它的构成需要一步步地完成,只有各个部分都创建好了,这个对象才算完成,因此就诞生了建造者模式。建造者模式将一个复杂的构造过程与其表现分离,这样, 同一个构建过程(使用同一个指挥者)可用于创建多个不同的表现。    建造者模式一般包括:一个指挥者(director), 多个建造者(builder),比如你去Kfc点餐,你要了个鳕鱼堡,你同...

ruguowoshiyu的博客 1162

自由曲面与衍射光学元件DOE:从基础理论到工业应用的全景解析

本文全景解析了自由曲面与衍射光学元件的核心理论与工业应用。文章深入探讨了自由曲面在非对称光学设计中的灵活性及其数学描述与制造挑战,并阐述了衍射光学元件通过微纳结构进行波前相位调制的原理与多样化功能。两者与经典光学互补融合,共同构成了高端成像、智能照明、激光加工及AR/VR等前沿领域的底层技术支柱。

devops8pract的博客 391

利用ArcGIS创建渔网计算渔网内土地利用占比划分中国北方农牧交错带

依据土地利用数据,根据参考文献划分要求,利用ArcGIS创建渔网对地物进行重分类,划分农业带、牧业带以及农牧交错带。

m0_60672527的博客 3060

Python 设计模式之建造者模式 Builder Pattern

#引入建造者模式 肯德基的菜单上有 薯条, 鸡腿,鸡翅,鸡米花,可乐,橙汁,火腿汉堡,至尊虾汉堡,牛肉汉堡 , 鸡肉卷等这些单品,也有很多套餐。 比如 套餐1:鸡翅,至尊虾汉堡,可乐,薯条 套餐2:鸡腿,火腿汉堡,橙汁,薯条 套餐3: 。。。。。 全家桶:。。。。。 这种有各种各样的单品一步一步生成各种套餐, 这种过程称的上建造者模式 使用多个简单的对象一步一步...

weixin_30797027的博客 308

perl 安装DBI和DBD

还可以从cpan.perl.org站点下载tar压缩文件形式的源代码发行版本,解压缩后,切换到相应的文件目录 cd DBI-1.54 perl Makefile.PL make make test make install 安装DBD时候 需要export ORACLE_HOME 验证安装: perldoc DBD::Oracle perldoc DBI 在线文档; perldoc -m

zhaoyangjian724的专栏 1754

设计模式第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万+

Yolo11改进:Block改进|MixDehazeNet,用于图像去雾网络的混合结构块|即插即用|附代码

https://arxiv.org/pdf/2305.17654 图像去雾是低级视觉领域中的一项典型任务。先前的研究验证了大型卷积核和注意力机制在去雾中的有效性。然而,存在两个缺点:引入大型卷积核时容易忽略图像的多尺度特性,而注意力模块的标准串联方式没有充分考虑雾分布的不均匀性。在本文中,我们提出了一种名为混合结构图像去雾网络(MixDehazeNet)的新型框架,该框架解决了上述两个问题。具体而言,它主要由两部分组成:多尺度并行大型卷积核模块和增强并行注意力模块。与单个大型卷积核相比,多尺度的并行大型卷积

m0_47867638的博客 1273

把复杂计算推到数据库里:ABAP CDS View Table Function 从原理到落地实践

摘要:本文深入解析ABAP CDS Table Function技术,重点探讨其在复杂业务场景下的应用价值。当CDS View无法满足窗口函数、递归计算等高级需求时,Table Function通过结合CDS类型系统与AMDP的数据库原生计算能力,成为关键解决方案。文章详细介绍了Table Function的架构设计(CDS实体声明+AMDP实现)、客户端处理机制、开发传输流程中的注意事项,并通过航班数据示例展示最小实现闭环。这项技术特别适用于需要将复杂计算下推到数据库层的场景,能显著提升RAP和OData

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 2297

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

建造者模式是一种创建型设计模式,它允许你分步骤创建复杂对象,使相同的构建过程可以创建不同的表示。;本质是 把"怎么装配"和"装成什么样"分离,让同样的装配流程可以生产不同"口味"的对象。

倔强老吕的博客 1687

基于PCL、Open3d、Easy3d 、VTK等常见开源库的QT开发

PCL+QT开发

阁楼 2万+

【编程素质】设计模式—建造者模式(Builder Design Pattern,生成器模式,Builder Pattern)

1,概念 封装一个产品的构造过程并允许按步骤构造(有多个步骤,工厂模式只有一个步骤,所以两者不同),并可以改变过程。 将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。 2,场景 相同的方法,不同的执行顺序,产生不同的事件结果时; 多个部件或零件,都可以装配到一个对象中,但是产生的运行结果又不相同时; 产品类非常复杂,或者产品类中的调用顺序不同产生了不同的效能,这个时候使用建造者模式非常合适; 3,类图 4,优缺点 1)优点 良好的封装性, 使用建造者模式可以使客户端不必知道产品内部

午后阳光 344

ssm框架搭建

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

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

设计模式---建造者模式(DesignPattern_Builder)

DesignPattern_Builder 摘录自:设计模式与游戏完美开发 十年磨一剑,作者将设计模式理论巧妙地融入到实践中,以一个游戏的完整实现呈现设计模式的应用及经验的传承 《轩辕剑》之父——蔡明宏、资深游戏制作人——李佳泽、Product Evangelist at Unity Technologies——Kelvin Lo、信仁软件设计创办人—— 赖信仁、资深3D游...

su9257的博客 144

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

每天一个设计模式之建造者(Builder)模式

一个代码实例让你了解建造者模式的整个流程

黑妖问路的博客 318

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

建造者模式,顾名思义的就是类似建房子,有一个固定的流程。在大话设计模式中,作者举了一个例子大概意思是同一道菜在中国的每一个地方都有不同的味道(LZ印象最深的是鱼香肉丝,来北方最之后印象最深的是宫保鸡丁。哈哈),而肯德基的鸡腿、汉堡在每一个城市都是一样的味道。我觉的这一个例子可以清楚的认识到建造者模式有一个固定的建造过程。建造者模式实现了依赖倒转原则,抽象不应该依赖细节,细节应该依赖与抽象。建造者模...

heidou_2016的博客 187

Design-pattern 创建型设计模式-Builder建造者模式

建造者模式|构建者模式|生成器模式 实际上,建造者模式的原理和代码实现非常简单,掌握起来并不难,难点在于应用场景。 比如,你有没有考虑过这样几个问题:直接使用构造函数或者配合 set 方法就能创建对象,为什么还需要建造者模式来创建呢? 建造者模式和工厂模式都可以创建对象,那它们两个的区别在哪里呢? 当创建一个对象是,构造函数参数很多,并且参数之间有逻辑关系。此时构造函数列表列表变的很长,代码在可读性和易用性上变差。在使用构造函数的时候,容易搞错各参数的顺序。传递进去错误的参数值,导致非常隐蔽的bug

lixld的专栏 271

建造者设计模式(Builder)

1.概述 建造者(Builder)设计模式用于组装具有复杂结构的实例。在构建一个复杂实例的时候,我们很难一气呵成,我们首先把实例的各个部分建造出来,然后分阶段把它们组装起来。 2.示例程序 一个使用Builder设计模式来编写“文档的程序”的例子,文档的结构有:一个标题、几个字符串、条目项目。 示例程序中有如下四个类:Builder类、Director类、TextBuilder类、HT...

学习笔记 646

lombok中的builder注解居然是一种设计模式:让我们了解一下超级实用的“建造者模式”吧

lombok中的builder注解居然是一种设计模式:让我们了解一下超级实用的“建造者模式”吧 lombok中的builder注解本质上是为你生成了一个构造器Builder类,通过这个类我们可以构造出带此注解的对象。本质上它实现了设计模式中一种经典的模式:建造者模式 1.认识: ①一句话来说:封装一个复杂对象的构建过程,并可以按步骤构造。因为需要对对象一步步建造起来,所以称为建造者模式。 ②将复杂产品的构建过程封装分解在不同的方法中,使得创建过程非常清晰,能够让我们更加精确的控制复杂产品对象的创建过

1937

C++设计模式——创建型模式之建造者模式(Builder)

创建型模式之建造者模式(Builder) 建造者模式(Builder)将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。 Builder:抽象的创造者,为创建一个产品对象的各个部件指定抽象的接口; ConcreteBuilder:具体建造者,实现抽象Builder定义的接口来完成产品的各个部件的创建。 Director:指挥者,它是一个使用Builder接口的对象; Product:具体的产品对象。 代码框架 #include <iostream> #

qq_25065595的博客 370

设计模式-建造者模式(Builder)2种实现方式(经典Builder模式、链式Builder模式)

目录 1 Builder模式 2 经典Builder模式 2.1 抽象建造者角色(Builder) 2.2 具体建造者(ConcreteBuilder) 2.3 指导者(Director) 2.4 产品角色(Product) 2.5 调试代码 3 链式Builder模式 3.1 产品角色(Product) 3.2 调试代码 注: 1 Builder模式 Buidler模式主要分为两种:1、经典Builder模式;2、链式变形Builder模式。 ...

旭东怪的博客 1328

设计模式:Builder--建造者模式

建造者模式 对象的创建:builder模式是为对象的创建而设计的模式 创建的是一个复合对象,被创建的对象为一个具有复合属性的复合对象。关注对象创建的各个部分创建过程,不同工厂(这里指的是builder生成器)。对产品属性有不同的创建方法。 设计师:Director 里面含有建造者Builder的引用,调用builder的方法执行事件 Builder接口 :构建者接口,工程师,创建对...

yubin1285570923的博客 249

Java-23个设计模式 Builder 建造者模式

Builder 在软件系统中,有时候面临着 " 一个复杂对象 " 的创建工作,通常由各个部分的子对象由一定算法构成。各个部分剧烈变化,而将他们组合的算法却相对稳定。 ① 创建手机的父类和子类(Huawei和Apple) /** * 将对象的表示和构建相分离,时同样的构建过程有不同的表示 * Mobile是对象的表示 * Director是同样的构建过程 */ public a...

weixin_42321815的博客 160

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

建造者模式(Builder Pattern)是一种创建型设计模式,用于将一个复杂对象的构建过程与其表示分离,以便可以使用相同的构建过程创建不同的表示。

weixin_44435110的博客 1440

[设计模式] 建造者模式Builder

将要构建的类(Bike)的所有必要属性都写成构建方法(buildXXX)现在我们如果将Builder抽象类的Bike属性设置成公有。有了Direct指挥者, 我们调用就可以更加轻松方便。在构建者模式想要创建他, 需要使用Builder类。因此我们还需要一个指挥者(Direct)来指挥构建。但是这只是一个抽象的构建自行车的类。具体构建出来的自行车是什么样子的。如果这个类有十几个乃至上百个字段。还需要我们自己写具体实现类。或者暴露出他的Bike字段。我们其实已经可以完成构建的。还不用担心遗忘某个字段。

m0_69343757的博客 237

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

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

QAQFyl的博客 547
上一篇: 2017 Android GitHub 常用开源框架汇总
下一篇: OkHttp 3 基本用法
QDJdeveloper
博客等级 码龄11年 108粉丝 49原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值