设计模式之建造者(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. 我们来看一下打印情况



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



用Charles抓包调试iOS应用?这份保姆级配置指南帮你绕过所有坑 本文提供了一份在Mac上使用Charles抓包调试iOS应用的保姆级配置指南。详细讲解了从Charles安装、Mac端代理设置、根证书安装,到iOS设备连接同一WiFi、配置代理以及最关键的系统证书信任等全流程步骤,并分享了SSL代理规则、断点调试等进阶技巧,帮助开发者高效定位和解决网络请求问题。 阅读详情

相关推荐

Decoder如何工作、Transformer如何训练、以及exposure bias问题

1、结合图文描述Decoder中各个模块是什么,以及是如何工作的。2、transformer是如何训练的。3、exposure bias问题造成的原因及解决方法

m0_59113542的博客 3345

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

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

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

从SRIOV到SIOV:PCIe虚拟化技术下一代革命

如果说SR-IOV是过去十年PCIe虚拟化的“标杆方案”,那SIOV就是为超大规模云数据中心、AI集群量身打造的“破局者”——它解决了SR-IOV难以逾越的扩展性瓶颈,同时平衡了性能、成本与生态兼容性。今天就从“为什么需要SIOV”到“SIOV到底强在哪”,再到“未来要解决什么问题”,做一次全方位深度拆解。

存储随笔 2560

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

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

ruguowoshiyu的博客 1162

基于物联网技术智慧园林绿化养护管理信息平台

近几年来,随着经济不断的发展,城市面积不断的扩大,城市管理中的园林绿化工作也在这种趋势下不断的发生着深刻改变。管养企业是否按制定的管养计划严格执行?绿化事件整改是否及时到位?绿地面积是否在稳步增长?管养的效果如何?如何客观评价管养企业的管养工作?这些都是我们各级管理者需要面对的问题。   智慧园林绿化养护管理信息平台的开发思路以“考核”为核心,整个信息平台体现出“新、快、高、全、享”五个特点。   智慧园林绿化养护管理信息平台的整个开发理念为:依托五大技术手段(全球卫星定位系统技术、地理信...

Cesium的博客QQ2252224326 2459

脑机接口(BCI)从原理到开发实战 07|运动想象BCI实战:基于BCI Competition IV 2a数据集

本文基于BCI Competition IV 2a数据集,详细介绍运动想象脑机接口系统的全流程实现。首先概述了该数据集的实验范式、参数特点和优势,然后指导环境准备与数据下载。通过代码示例展示了数据加载、事件标记提取和信号可视化方法。重点构建了完整的预处理流水线,包括通道选择、重参考、带通滤波(8-30Hz)和ICA去伪迹等关键步骤。文章旨在帮助读者将零散的BCI知识整合为完整的实战项目,掌握从原始脑电数据到运动意图解码的核心技术。

小明的博客 850

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

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

weixin_30797027的博客 308

告别有线:用PVE直通无线网卡,打造一台真正的‘无线’Win10软路由/测试机

本文详细介绍了如何通过PVE直通无线网卡技术,构建全无线Win10软路由或测试机。从硬件选型、PVE环境配置到PCIe和USB双模直通技术,逐步指导实现Wi-Fi AP和蓝牙连接功能,为家庭实验室和小型办公环境提供灵活高效的网络解决方案。

weixin_28683689的博客 587

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

六自由度机器人(机械臂)运动学建模及运动规划系列(一)——简介

毕业设计做了六轴机器人相关的课题,做完之后学到很多,在这里分享一下。

weixin_47849087的博客 2万+

ROS TF坐标转换实战:从零搭建机器人坐标系(附常见问题排查)

本文提供了一份ROS TF坐标转换的实战指南,详细讲解了如何从零为机器人搭建完整的坐标系,并深入解析了TF的原理。内容涵盖静态与动态坐标变换的发布、URDF模型使用、以及Rviz和rqt_tf_tree等可视化调试工具。文章还附带了常见问题排查表,帮助开发者快速定位并解决TF树断裂、数据错位等典型问题。

weixin_29268385的博客 204

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

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

倔强老吕的博客 1687

OSPF的7种状态,DR与BDR的基本概念,1、2、3、4、5、7类LSA解析,Stub、NSSA、Totally Stub、Totally NSSA的基本概念与配置

OSPF的7种状态,DR与BDR的基本概念,1、2、3、4、5、7类LSA解析,Stub、NSSA、Totally Stub、Totally NSSA的基本概念与配置

weixin_72194028的博客 3008

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

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

午后阳光 344

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

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

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

su9257的博客 144

ssm框架搭建

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

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

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

黑妖问路的博客 318

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

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
上一篇: 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、付费专栏及课程。

余额充值