建造者模式(builder)

从零开始:如何用Python建立你的第一个人工智能模型 在这篇文章中,我们将介绍如何从零开始使用Python建立你的第一个人工智能模型。无论你是刚接触编程的新手,还是有经验的开发者想进一步探索人工智能领域,这篇文章都将为你提供清晰、详细的指南。我们将一步步探索数据预处理、模型建立、训练和测试的过程,以及如何解读模型的结果。 阅读详情

前言

    • 建造者模式也叫生成器模式,作为设计模式里五个创建者模式之一,它的作用也是为了创建对象,但是不同于其他模式直接new的方式,它的存在是为了创建复杂的对象,因此创建之路一波三折。
    • 同工厂模式相似,建造者模式也是完成了对创建对象程序的封装,达到了要用就拿的效果。
    • 关于什么是复杂的对象,如果要用的时候直接new出来的就不复杂,复杂的对象复杂在为了达到某种作用,我们需要对某些对象进行属性值的注入,行为的更改,使对象更丰满,然后在拿到该对象,简而言之,建造者模式对对象进行某些包装,这样拿到的对象就是我们需要的。

 

情景引入

      下面我们举例来看什么是建造者模式,建造者模式在我们构建对象过程中发挥了哪些作用。支付宝里有个小游戏叫蚂蚁庄园,里面的养的小鸡通过吃饲料产生爱心,而小鸡又有多种套装可选,能随意组合,本例中我们就以套装为对象,进行创建和包装(先看懂程序,我们在分析它)。

 

建造者的几种角色

抽象建造者(builder)

它声明为创建一个Product对象的各个部件指定的抽象接口。

具体建造者(ConcreteBuilder)

实现抽象接口,构建和装配各个部件。

指挥者(director)

构建一个使用Builder接口的对象。它主要是用于创建一个复杂的对象,它主要有两个作用,一是:隔离了客户与对象的生产过程,二是:负责控制产品对象的生产过程。

产品角(product)

一个具体的产品对象。

 

我程序的类图

 

java源程序

套装类

package builder;

public class Suit {//蚂蚁庄园小鸡套装
	String hat;//帽子
	String glasses;//眼镜
	String clothes;//衣服
	String food;//食物
	
	public void suitShow(){
		System.out.println("限量版的  " +hat+" "+glasses+" "+clothes+" "+food+"  套装");
	}
	public String getHat() {
		return hat;
	}
	public void setHat(String hat) {
		this.hat = hat;
	}
	public String getGlasses() {
		return glasses;
	}
	public void setGlasses(String glasses) {
		this.glasses = glasses;
	}
	public String getClothes() {
		return clothes;
	}
	public void setClothes(String clothes) {
		this.clothes = clothes;
	}
	public String getFood() {
		return food;
	}
	public void setFood(String food) {
		this.food = food;
	}
	
}

抽象建造者

       抽象的建造者,里面维护了一个套装类的实例,而且里面声明了一些对套装类操作的抽象方法和实例返回方法,很明显子类可以对套装类对象进行操作并把对象完整返回

package builder;

public abstract class SuitBuilder {
	Suit suit = new Suit();

	public Suit getSuit() {
		return suit;
	}

	public abstract void setHat();

	public abstract void setGlasses();

	public abstract void setClothes();

	public abstract void setFood();
}

具体建造者(时尚套装)

package builder;

//时尚的套装
public class FashionSuitBuilder extends SuitBuilder{

	public void setHat() {
		suit.setHat("麦克帽子");
	}

	public void setGlasses() {
		suit.setGlasses("华丽眼镜");
	}

	public void setClothes() {
		suit.setClothes("熊孩子外套");
	}

	public void setFood() {
		suit.setFood("野葡萄");
	}

}

具体建造者(简约套装)

package builder;

//简约的套装
public class SimpleSuitBuilder extends SuitBuilder{

	public void setHat() {
		suit.setHat("土豪金帽子");
	}

	public void setGlasses() {
		suit.setGlasses("花呗眼镜");
	}

	public void setClothes() {
		suit.setClothes("丽丽上衣");
	}

	public void setFood() {
		suit.setFood("西伯利亚野苹果");
	}

}

指导者

       指导者负责创建对象,里面包含了建造者的引用,在constructor方法里,通过指挥建造者对对象进行创建包装,取得建造完成的对象,在拿给客户端。

package builder;

public class SuitDirector {
		SuitBuilder asb;
		public SuitDirector(SuitBuilder asb) {
			this.asb=asb;
		}
		public Suit constructor(){
                //建造者完成对对象的创建
			asb.setHat();
			asb.setClothes();
			asb.setFood();
			asb.setGlasses();
			return asb.getSuit();//返回包装完成的对象
		}
}

客户端

package builder;

public class Client {
	public static void main(String[] args) {
		SuitBuilder sb = new FashionSuitBuilder();//生成具体建造者
		SuitDirector sd = new SuitDirector(sb);//生成指导者
		Suit s = sd.constructor();//创建套装
		s.suitShow();
	}

}

运行结果

 

程序分析

  • 程序运行步骤我在例子中已经说明了,现在我们看一下建造者模式中各个角色的用途,建造者模式通过创建对象包装对象的方式完成了对复杂对象的构建。
  • 首先我们的产品套装类,只是简单的产品,建造者则是以他为基础进行构建,抽象建造者定义了建造方式,而具体建造者则定义对对象的行为操作属性的创建的具体方式,而真正具有创建权的则是指导者,指导者决定了建造者要建造哪些东西,然后指导者把建造完成的对象拿给客户。

 

现在我们在回头看看建造者模式

 

定义

     使用建造者模式封装一个产品的构造过程,并允许按步骤构造。

 

应用场景

  1. 需要生成的产品对象具有复杂的内部结构
  2. 需要生成的产品对象的属性相互依赖,建造者模式可以强迫生成顺序。

 

应用到的设计原则

  1. 高内聚,低耦合,建造者模式对对象的构建实现了良好的封装,与客户进行了解耦
  2. 开闭原则,扩展建造者类只要实现建造者抽象类就可以,不用更改原有代码

 

建造者模式优点

    1. 将复杂对象的创建过程封装起来,实现了与客户端的解耦
    2. 允许对象通过多个步骤来创建,并且可以改变过程
    3. 产品的实现可以被替换

缺点

       建造者模式建造的对象一般具有较多的共同点,如果差异性较大,则没办法使用这个模式

英伟达DeepStream学习笔记7——DeepStream接入USB相机并实现广角摄像头的畸变矫正 deepstream官方提供了一个畸变矫正的例子,包含了鱼眼和普通广角的矫正。我目前准备做一个广角的畸变矫正,我已经使用opencv实现功能,目前增加到deepstream框架中。示例代码在\opt\nvidia\deepstream\deepstream-5.0\sources\apps\sample_apps\deepstream-dewarper-test 中,鱼眼矫正——deepstream官方版 https://developer.nvidia.com/blog/calibration-trans 阅读详情

相关推荐

软件工程:数据字典

数据字典

永远怀着至诚之心拥抱世界 4275

复杂对象的组装与创建——建造者模式(二):建造者模式解决方案

8.3 完整解决方案Sunny公司开发人员决定使用建造者模式来实现游戏角色的创建,其基本结构如图8-3所示:在图8-3中,ActorController充当指挥者,ActorBuilder充当抽象建造者,HeroBuilder、AngelBuilder和DevilBuilder充当具体建造者,Actor充当复杂产品。完整代码如下所示://Actor角色类:复杂产品,考虑到代码的可读性,只列出部分成员

爱橙子的OK绷的专栏 703

2025认证杯数学建模第二阶段B题完整论文(代码齐全):谣言在社交网络上的传播

这需要我们深入理解抽样检测所得的次品率的不确定性及其对生产决策的影响。对于问题二的决策分析,我们可将其细分为四个关键的决策节点,分别是零件 1 的质量检测、零件 2 的质量检测、成品的质量检测,以及成品检测不合格时的拆解处理。该策略的实施,保证了在算法迭代过程中,表现最为优异的个体能够得到保留,并顺利传递至下一代,从而保障了算法在寻求最优解过程中的收敛性和优化效果。因此,我们采用假设检验的方法,将次品分布构造成 t 分布,从而确定在相应置信度的条件下,抽样次数 n 和次品数 k 所需满足的要求。

2301_81596622的博客 1007

【java设计模式】之 建造者(Builder)模式

        我们还是举上一节的例子:生产汽车。上一节我们通过模板方法模式控制汽车跑起来的动作,那么需求是无止境的,现在如果老板又增加了额外的需求:汽车启动、停止、鸣笛引擎声都由客户自己控制,他想要什么顺序就什么顺序,那该如何做呢? 1. 汽车无休止的改造         假如现在要生产两种车,奔驰和宝马,这两辆车都有共性,我们所需要关注的是单个车的运行过程,这才是老板所关心的点所在。我们先...

1万+

BitLocker恢复密钥丢失?从原理到实战的完整解锁与系统重生指南

磁盘加密技术是数据安全的核心防线,它通过对存储设备上的数据进行编码,确保未经授权的用户无法访问。其原理主要基于加密算法(如AES)与密钥管理机制,在操作系统启动前或数据读写时进行实时加解密。这项技术的核心价值在于防止设备丢失或被盗后的数据泄露,尤其对于笔记本电脑和移动设备至关重要。典型的应用场景包括企业办公电脑、存有敏感信息的个人设备以及符合合规性要求的行业。当使用Windows系统自带的BitLocker加密功能时,若因硬件改动、系统更新等触发保护机制,用户可能会面临需要输入恢复密钥才能启动的困境。本文聚

weixin_34006965的博客 489

Unity 调用安卓内部安装apk

一、申请权限 应用内安装其他应用的权限属于特殊权限,需要在特殊申请。 Uri packageURI = Uri.parse("package:" + mContext.getPackageName()); Intent intent = new Intent(Settings.ACTION_MANAGE_UNKNOWN_APP_SOURCES, packageURI); startA...

BDDNH的博客 1240

JAVA建造者模式构建对象

public class User { private int id; private String name; private int age; private int height; private int weight; private String address; private long phone; private ...

sinat_28776939的博客 429

AutoCAD中圆弧折线化方法与实现

在AutoCAD中,圆弧折线化是将圆弧曲线转换为由一系列线段组成的折线曲线的过程。本文将介绍如何使用LISP编写代码来实现圆弧折线化,并提供相应的源代码。上述示例代码将生成一个以坐标原点为圆心、起点为(5.0, 0.0, 0.0)、终点为(0.0, 5.0, 0.0)、半径为5.0、角度为90度的圆弧的折线表示。通过使用上述的LISP代码,你可以在AutoCAD中实现将圆弧转换为折线的功能。你可以根据需要修改代码中的参数来适应不同的圆弧转换需求。函数,并传入圆弧的起点、终点、圆心、半径和角度参数。

VcuOcaml的博客 1417

建造者模式-Builder Pattern

建造者模式(Builder Pattern)是一种创建型设计模式,它可以让你构建复杂对象时更加灵活和可控。这种模式的主要目的是将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。在软件开发中,我们经常会遇到一些复杂的对象,这些对象通常由多个部分组成,而且每个部分的创建和组合可能需要花费大量的时间和精力。为了解决这个问题,我们可以使用建造者模式来简化对象的构建过程。建造者模式的核心思想是将复杂对象的构建过程分解为多个简单的步骤,每个步骤负责创建一个特定的部分。

jaune162的专栏,最新动态请关注:https://jaune162.blog 1383

基于ENVI完成影像的去云操作以及后续处理

利用ENVI完成重采样影像的去云操作 由于SNAP重采样之后的影像是分波段保存的,ENVI的波段运算工具一次也只能输出一个波段,所以去云的操作分波段进行,原理是掩膜法 下面是打开所有波段后的界面 去云的依据是以quality_scene_classification栅格文件为基础,该文件是哨兵2数据自带的场景质量分类图,包含12个级别,可以通过SNAP软件查看,如下图所示: 对于去云操作而言,我们只需要DARK_FEATURE_SHADOW(地形等),CLOUD_SHADOW(云阴影)、CL

lemon_tttea的博客 2万+

【系列05】端侧AI:构建与部署高效的本地化AI模型 第4章:模型量化(Quantization)

量化的基本思想是减少模型中用于表示参数和激活值的比特数。在模型训练时,参数通常使用32位浮点数(FP32)进行存储,这提供了高精度,但也消耗大量的内存和计算资源。量化则将这些32位浮点数转换成低比特数表示,通常是8位整数(INT8)。量化的原理可以概括为:对浮点数范围进行校准,并将其映射到更小的整数范围内。例如,将一个FP32的权重(如-1.5到1.5)映射到INT8的范围(-128到127)。在推理过程中,模型将使用这些低精度的整数进行计算,从而大大减少了所需的计算量。量化带来的主要收益减少模型大小。

学习,输出==》再学习再输出 1213

设计模式-03建造者模式Builder Pattern

建造者模式摘要:建造者模式是一种创建型设计模式,用于分步骤构建复杂对象,使构建过程与对象表示分离。该模式适用于需要创建包含多个组成部分的对象,特别是当这些部分可选或构建顺序可变时。通过UML类图展示了经典建造者模式和链式建造者模式的结构差异,并提供了Java实现示例。实现方式包括通过Builder内部类分步骤设置对象属性,最后通过build()方法返回完整对象,使代码更清晰且避免构造器参数过多的问题。

d3y1`5 81_09 1206

第244篇 视觉SLAM后端之BA优化——Bundle Adjustment的原理

本文介绍了SLAM后端优化中的Bundle Adjustment(BA)技术。BA通过同时优化相机位姿和3D路标点位置,最小化重投影误差,解决前端估计的累积误差问题。文章详细讲解了BA的数学原理,包括目标函数构建、Gauss-Newton法和Levenberg-Marquardt法求解过程,以及利用稀疏性和Schur补加速计算的关键技术。对比了全量BA和增量BA的优缺点,并介绍了Ceres、g2o等工程实现工具。BA作为SLAM后端的核心算法,其理解深度直接影响系统性能优化能力。

郑伟强dev的专栏 346

Java 设计模式——建造者模式(Builder Pattern)

Java 设计模式——建造者模式(Builder Pattern) 一.简介 1.定义 将一个复杂对象的构建与它表示分离,使用同样的构建过程可以创建不同的表示 2.主要作用 在用户不知道对象建造过程和细节的情况下就可以直接创建复杂对象 3.如何使用 用户只需给出指定复杂对象的类型和内容,建造者模式负责按顺序创造对象(把内部建造过程和细节隐藏起来) 4.解决的问题 (1).方便用户创建复杂的对...

a158s168的博客 276

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

Builder Pattern 建造者模式

建造者模式是日常开发中比较常见的设计模式,它的主要作用就是将复杂事物创建的过程抽象出来,该抽象的不同实现方式不同,创建出的对象也不同。通俗的讲,创建一个对象一般都会有一个固定的步骤,这个固定的步骤我们把它抽象出来,每个抽象步骤都会有不同的实现方式,不同的实现方式创建出的对象也将不同。举个常见的例子,想必大家都买过车,车的生产或者组装其实就是属于建造者模式,我们知道,车的生产都需要安装发动机,变速箱,底盘等组件。我们可以把这个安装步骤抽象出来,至于到底装哪种发动机,比如宝马还是奔驰就是对该抽象安装步骤的具体实

weixin_40955388的博客 289

SAP B1中文培訓教材_SDK

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

5、建造者模式(Builder Pattern)

建造者模式(Builder Pattern)

qq_38304915的博客 1188

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

一文看懂设计模式-建造者模式(builder Pattern)

1、意图:将一个复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表示2、主要解决:主要解决在软件系统中,有时候面临着“一个复杂对象”的创建工作,其通常由各个部分的子对象用一定的算法构成;

2301_79351943的博客 839

建造者模式(Builder Pattern)详解

建造者模式是一种创建型设计模式,它允许你分步骤创建复杂对象。该模式允许你使用相同的创建代码生成不同类型和形式的对象。建造者模式的核心思想是将一个复杂对象的构建过程与其表示分离,使得同样的构建过程可以创建不同的表示。建造者模式是一种强大的创建型设计模式,特别适合于构建复杂对象。它将对象的构建过程与表示分离,使得同样的构建过程可以创建不同的表示。在Java中,建造者模式特别有用,可以避免"重叠构造函数"问题,提高代码的可读性和维护性。

yk_dflkg的博客 1862

建造者模式(Builder Pattern)

建造者模式(Builder Pattern) 建造者模式(Builder Pattern),将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。 结构 参与者 Builder ——为创建一个Product对象的各个部件指定抽象接口。 ConcreteBuilder ——实现Builder的接口以构造和装配该产品的各个部件。 ——定义并明

jiangxt211的专栏 389

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

建造者模式(Builder Pattern):将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。 建造者模式要求建造过程中是稳定的。 Android 用到的 Builder 模式:http://blog.youkuaiyun.com/bboyfeiyu/article/details/15504187 转载于:https://www.cnblogs.com/liyira...

diaolapei9880的博客 145

Java设计模式--建造者模式【Builder Pattern】

昨晚回到家里,我爸爸气冲冲地跟我诉苦,“哎!,干个装修容易么?顾客啥都不懂,还非得规定装修顺序,要先贴地板砖后刷墙,到时候贴好的地砖上全是泥,哪有这么干活的?”老爸干了一辈子的装修,一切事宜由他全权负责,难免心力憔悴。但是,我仔细想了下这个事情,如果老爸签订了一个公司,公司负责接活揽活,规定装修要求,老爸只负责执行,那不就轻松了吗?于是我就想起了建造者模式。       建造者模式的定义是:将一

CoderLover 481

建造者模式 Builder Pattern

一、模式介绍 建造者(Builder)模式和工厂模式的关注点不同:建造者模式注重零部件的组装过程,而工厂方法模式更注重零部件的创建过程,但两者可以结合使用。 1.1、定义 将一个复杂对象的构造与它的表示分离,使同样的构建过程可以创建不同的表示。它是将一个复杂的对象分解为多个简单的对象,然后一步一步构建而成的。它将变与不变分离,即产品的组成部分是不变的,但每一部分是可以灵活选择的。 1.2、优点 封装性好,构建和表示分离 扩展性好,各个具体的建造者相互独立,有利于系统的解耦 客户端不必知道产品内部组成的细节

木易 315

建造者模式——Builder Pattern

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

不会停下学习的脚步,重在思考。 569

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

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

倔强老吕的博客 1687

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

一、什么是建造者模式 定义:建造者模式(Builder Pattern)又称生成器模式,是一种构建对象的模式。 1、它可以将一个产品的内部表象与产品的生成过程分割开来,从而可以使一个建造过程生成具有不同的内部表象的产品对象。 2、由于建造零件的过程很复杂,因此,这些零件的建造过程往往被“外部化”到另一个乘坐建造者的对象里,建造者对象返还给客户端的是一个全部零件都建造完毕的产品对象。它将产品的结构和建造过程对客户端隐藏起来。 【释义】 使用生活中的例子来解释建造者...

Albert_____的博客 375

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

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

QAQFyl的博客 547
上一篇: 设计模式入门———状态模式(State)
下一篇: 设计模式入门-------责任链模式(responsibility)
zhen921
博客等级 码龄9年 58粉丝 51原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值