创建型-建造者模式

LiveReload:释放你的F5,实时预览HTML效果 一、liveReload插件开发背景Web前端开发人员在写页面时,如果修改了HTML or CSS,要想看效果通常的做法就是保存代码就得 Alt+Tab,切换到浏览器(当然,我知道很多开发人员是双屏操作不一定需要切换到浏览器),但是一定要F5刷新才能看自己刚写的代码有没有效果,没有效果就再切换到编辑器下修改,然后再切换到浏览器F5刷新看效果,还没有效果,就再继续修改,如此反复。时间久了,前端自动化... 阅读详情

解决了什么问题

如果一个类中有很多属性,为了避免构造函数的参数列表过长,影响代码的可读性和易用性,我们可以通过构造函数配合 set() 方法来解决。但是,如果存在下面情况中的任意一种,我们就要考虑使用建造者模式了。

  • 我们把类的必填属性放到构造函数中,强制创建对象的时候就设置。如果必填的属性有很多,把这些必填属性都放到构造函数中设置,那构造函数就又会出现参数列表很长的问题。如果我们把必填属性通过 set() 方法设置,那校验这些必填属性是否已经填写的逻辑就无处安放了。
  • 如果类的属性之间有一定的依赖关系或者约束条件,我们继续使用构造函数配合 set() 方法的设计思路,那这些依赖关系或约束条件的校验逻辑就无处安放了。
  • 如果我们希望创建不可变对象,也就是说,对象在创建好之后,就不能再修改内部的属性值,要实现这个功能,我们就不能在类中暴露 set() 方法。构造函数配合 set() 方法来设置属性值的方式就不适用了。

 

 

如何解决的

注意点

  • ResourceConfig 的构造函数需要是 private
  • Builder 类成员需要与 ResourceConfig 中的保持一致

public class ResourceConfig {

    // 资源配置名称

    private String name;

    // 最大资源数量,默认值 10

    private int max = 10;

    // 最小资源数量,默认值 10

    private int min = 10;

 

    private ResourceConfig(Builder builder) {

        this.name = builder.name;

        this.max = builder.max;

        this.min = builder.min;

    }

 

    // 定义类属性 get 方法

    public String getName() {

        return name;

    }

 

    public int getMax() {

        return max;

    }

 

    public int getMin() {

        return min;

    }

 

    // 定义内部类 Builder

    public static class Builder {

        // 资源配置名称,必须配置

        private String name;

        // 最大资源数量,默认值 10

        private int max = 10;

        // 最小资源数量,默认值 10

        private int min = 10;

 

        public ResourceConfig build() {

            // 构建前做需要的校验

            if (StringUtils.isBlank(name)) {

                throw new IllegalArgumentException("name not null");

            }

            if (max < 1) {

                throw new IllegalArgumentException("max must be greater than or equal to 1");

            }

            if (min < 1) {

                throw new IllegalArgumentException("min must be greater than or equal to 1");

            }

            // 类属性之间存在依赖关系

            if (max < min) {

                throw new IllegalArgumentException("max must be greater than or equal to min");

            }

            // 构建

            return new ResourceConfig(this);

        }

 

        // 设置相关属性

        public Builder setName(String name) {

            this.name = name;

            return this;

        }

 

        public Builder setMax(int max) {

            this.max = max;

            return this;

        }

 

        public Builder setMin(int min) {

            this.min = min;

            return this;

        }

    }

}

 

 

如何使用

ResourceConfig resourceConfig = new ResourceConfig.Builder().setName("lp").setMin(2).setMax(5).build();

 

 

参考资料

极客Time–设计模式之美-第46讲

人工智能在文学领域的应用:创作无限可能的智能作家 人工智能在文学领域的应用:创作无限可能的智能作家 作者:禅与计算机程序设计艺术 1. 背景介绍 人工智能技术近年来飞速发展,在各个领域都有广泛应用。文学创作作为人类最高级的智力活动之一,也逐渐受到人工智能技术的影响和改变。随着自然语言处理、生成式模型等人工智能 阅读详情

相关推荐

FPGA新手必看:XC7Z020最小系统搭建全攻略(附原理图解析)

本文为FPGA新手提供了XC7Z020最小系统搭建的完整实战指南。文章详细解析了电源架构、时钟复位、配置调试等关键硬件电路设计,并重点剖析了外围电路与端口引脚的连接要点及常见陷阱,帮助读者从零开始构建稳定可靠的开发平台。

weixin_29189377的博客 360

设置模式之经典的Builder模式总结

经典的Builder模式主要有四个参与者: Product:被构造的复杂对象,ConcreteBuilder用来床架该对象的内部便是,并定义它的装配过程。 Builder:抽象接口,用来定义创建Product对象的各个组成部件的操作。 ConcreteBuilder:Builder接口的具体实现,可以定义多个,是时机构建Product对象的地方,同时会提供一个返回Product的接口。 Dire...

weixin_42009516的博客 442

深入解析线性反馈移位寄存器(LFSR)的工作原理与实现

本文深入解析了线性反馈移位寄存器(LFSR)的核心原理与实现方法。通过生动的比喻和详细的步骤拆解,阐述了LFSR如何通过反馈多项式和移位操作生成伪随机序列,并对比了斐波那契型与伽罗瓦型两种硬件结构。文章还涵盖了LFSR在数字电路测试、通信扰码及快速伪随机数生成等关键应用场景,同时指出了其在密码学中的局限性,并提供了Python和C语言的高效实现代码示例。

weixin_29007243的博客 545

我和王争学设计模式|建造者模式

我们可以把校验逻辑放置到 Builder 类中,先创建建造者,并且通过 set() 方法设置建造者的变量值,然后在使用 build() 方法真正创建对象之前, 做集中的校验,校验通过之后才会创建对象。除此之外,我们把 ResourcePoolConfig 的构造函数改为 private 私有权限。 这样我们就只能通过建造者来创建 ResourcePoolConfig 类对象。并且,ResourcePoolConfig 没有提供任何 set() 方法,这样我们创建出来的对象就是不可变对象了。 如果构造函数参数

偷懒的加菲 330

PDF批量加水印 与 去除水印实践

我们可以给PDF加图片水印或文字水印,要去除图片水印,一般只需要删除最后一个图片对象即可。要去除文字水印,需要保证主体内容和文字水印在/Contents中位于不同的对象内,这样我们只需要删除文字水印对应的对象即可删除水印。而对于主体内容和文字水印已经混合在一个对象时,本文的提供的方法则无能为力,需要进一步深入分析PDF细节。

小小明-代码实体的专栏 2763

Aspen Plus下载教程Aspen Plus V14 保姆级安装步骤(附安装包)

26、在WlmAdmin界面中,依次点击【Subnet Servers】、【admin】、【Add Feature】、【From a File】、【To Server and its File】。35、在产品选择页面,勾选需要安装的所有产品(重要:不要勾选【Aspen Online(Plant Data)】),然后点击【File Location】。回到桌面,点击任务栏的【开始菜单】,在【所有应用】中找到【Aspen Plus V14】软件图标,将其拖到桌面上创建快捷方式。9、这里可以更改软件的安装位置。

ps_xiaowang的博客 1万+

一起谈谈设计模式(二):建造者模式

建造者模式是一种常用的设计模式,你可能每时每刻都在用只是你没有察觉到。比如我们常用的lambok内的@Builder注解,就是使用了建造者模式,业务代码中只要调用.builder方法,然后设置属性,最后调用.build就得到了最终的目标对象。这篇文章首先讲建造者模式内的几种角色,以及他们之间是如何配合完成一个对象的创建,最后会将lambok实现建造者模式的代码写出来。这种代码其实很简单,在日常开发过程中都是可以使用的。 建造者模式 在建造者模式中有几个重要的角色,一个是指挥者、一个是建造者,最后就是具体需要

IT-CRUD 305

等保测评-瀚高数据库

一般适用于等保测评

m0_54146694的博客 1634

创建型模式——建造者模式(Builder Pattern)

创建者模式又叫建造者模式属于*创建型模式*。 使用同样的构建过程,根据需要创建不同的表示。这种设计模式隐藏了具体的创建过程,将复杂对象的创建过程加以抽象,动态的创建对象。它提供了一种创建对象的最佳方式。

qq_46658171的博客 333

7.3 空间矢量调制(SVM)整数算法

本文提出了一种基于整数运算的空间矢量调制(SVM)优化实现方案,适用于计算资源有限的Cortex-M0平台。针对传统SVM算法中复杂的三角函数和浮点运算问题,重点优化了扇区判断和占空比计算两个关键环节。在扇区判断方面,采用基于电压分量符号和相对大小的三变量法,避免了角度计算;在占空比计算方面,通过几何关系将作用时间表示为电压分量的线性组合,并采用定点数实现。方案还详细讨论了系数定点化、死区补偿等实现细节,在保证精度的同时显著降低了计算复杂度。实验结果表明,优化后的整数算法在M0平台上仅需50-80个周期即可

技术工作者 945

图神经网络实战(21)——图神经网络的可解释性

在本节中,我们探讨了应用于图神经网络 (Graph Neural Networks, GNN) 的可解释性人工智能 (Explainable Artificial Intelligence, XAI) 技术。可解释性是许多领域的关键要素,可以帮助我们建立更好的模型。我们介绍了不同的局部解释技术,并重点讨论了 GNNExplainer (基于扰动的方法),在图分类任务中应用 GNNExplainer。

盼小辉丶的博客 9595

【Java 设计模式 · 创建型】建造者模式(Builder Pattern)

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

茶色喵的博客 919

以太网_RGMII接口与GMII接口的转化_03

RGMII接口转GMII接口!

weixin_42499230的博客 379

【设计模式|创建型】建造者模式(Builder Pattern)

假设我们要建造一座房子,这个房子有很多不同的部分,比如墙壁、地板、屋顶等等。我们可以使用建造者模式来创建这座房子。 首先,我们定义一个房子类 House,它有一些属性,比如墙壁、地板和屋顶。然后,我们创建一个建造者类 HouseBuilder,它有一些方法用于构建房子的不同部分。最后,我们创建一个指挥者类 HouseDirector,它负责指导建造者如何构建房子。

zxcyxg123的博客 152

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

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

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

创建型模式--建造者模式【Builder Pattern】

介绍 建造者模式使用多个简单的对象一步一步构建成一个复杂的对象。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 源码 java.lang.StringBuilder#append() @Override public StringBuilder append(boolean b) { super.append(b); return this; } j...

thebigdipperbdx的博客 297

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

创建型模型——建造者模式(Builder Pattern)

建造者模式我的理解使用的场景设计实现有抽象的建造者实现方式无抽象的建造者两种不同的建造者适用范围实际应用多参数方法改良(面试可以说)和抽象工厂的区别 我的理解 建造者模式,属于创建型设计模式的一种。顾名思义,就像建房子一样,需要层层组装,一个一个的设置部件,最后返回一个完整的对象。 第一:用来创建复杂对象的 第二:对客户端隐藏了产品复杂的创建细节 第三:就像建房子一样,建造者模式强调层层组装,最后...

qq_34352013的博客 539

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

【设计模式】【创建型模式】建造者模式(Builder)

分离构建与表示将对象的构建过程与表示分离,使得相同的构建过程可以创建不同的表示。客户端不需要知道对象的具体构建细节。灵活性和可扩展性可以逐步构建对象,支持动态配置。新增构建步骤或修改构建顺序非常方便。代码可读性和可维护性链式调用()使代码更加简洁和直观。将复杂的构建逻辑封装在建造者类中,客户端代码更清晰。避免构造方法参数过多通过逐步设置属性,避免了构造方法参数过长的问题(保证对象的一致性对象在完全构建之前不会被使用,确保对象的一致性和完整性。

flzjkl的博客 1522

Java GoF 23种设计模式-创建型模式-建造者模式(Builder Pattern)

文章目录一、模式定义二、模式动机三、模式结构四、代码实现 一、模式定义 建造者模式(Builder Pattern):将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。建造者模式是一步一步创建一个复杂的对象,它允许用户只通过指定复杂对象的类型和内容就可以构建它们,用户不需要知道内部的具体构建细节。建造者模式又可以称为生成器模式。 建造者模式是一种创建型设计模式, 它是将一个复杂的对象分解为多个简单的对象,然后一步一步构建而成。它将变与不变相分离,即产品的组成部分是不变的,但每一部分是

WU4566285的博客 541

设计模式(六)建造者模式(Builder pattern)-- 创建型

什么是建造者模式? 建造者模式 —> 创建型模式 基本介绍 1) 建造者模式(Builder Pattern) 又叫生成器模式,是一种对象构建模式。它可以将复杂对象的建造过程抽象出来(抽象类别),使这个抽象过程的不同实现方法可以构造出不同表现(属性)的对象。(抽象出来的是建造者,之前一直觉得把产品抽象出来。后面代码会有体现) 2) 建造者模式 是一步一步创建一个复杂的对象...

SmileTimLi的博客 535

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

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

资深系统架构,深耕高并发研发与 AI 大模型工程化落地。技术栈以 Python (AI/NLP/RAG/Agent) 与 Golang (高并发架构) 为双核心,兼具 PHP 大型应用经验。专注算法落地、复杂系统设计及团队技术赋能 638

创建型模式 - 建造者模式 (Builder Pattern)

建造者模式

HongSH945的博客 483

建造者模式【创建型】

建造者设计模式的设计思想和实现案例

zjj_flower的博客 99

创建型模式——建造者模式

创建型模式——建造者模式 (一)概述 建造者模式,又被称为生成器模式,这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。使用多个简单的对象一步一步构建成一个复杂的对象,有点像造房子一样一步步从地基做起到万丈高楼。 将一个复杂对象的构造与它的表示分离,使同样的构建过程可以创建不同的表示,它是将一个复杂的对象分解为多个简单的对象,然后一步一步构建而成。它将变与不变相分离,即产品的组成部分是不变的,但每一部分是可以灵活选择的。 ...

物是人非,结局始终不美 7058

创建型模式之建造者模式

建造者模式(Builder Pattern): 使用多个简单的对象一步一步构建成一个复杂的对象。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 概述: 将一个复杂对象的构建与表示分离,使得同样的构建过程可以创建不同的表示。 分离了部件的构造(由Builder来负责)和装配(由Director负责)。 从而可以构造出复杂的对象。这个模式适用于:某个对象的构建过程复杂的情况。 由于实现了构建和装配的解耦。不同的构建器,相同的装配,也可以做出不同的对象;相同的构建器,不同的装配顺序也可以做出

weixin_49107940的博客 379

创建型-建造者模式(Builder Pattern)

将一个复杂对象的构建与表示分离,使得同样的构建过程可以创建不同的表示。建造者模式(Builder Pattern) 又叫生成器模式,是一种对象构建模式。它可以将复杂对象的建造过程抽象出来(抽象类别),使这个抽象过程的不同实现方法可以构造出不同表现(属性)的对象。建造者模式 是一步一步创建一个复杂的对象,它允许用户只通过指定复杂对象的类型和内容就可以构建它们,用户不需要知道内部的具体构建细节。

babstyt的博客 660

设计模式之创建型:建造者模式

建造者模式是一种​​创建型设计模式​​,用于分步骤构造复杂对象。它通过将对象的构建过程与表示分离,使得同样的构建过程可以创建不同的对象形态。实现方式适用场景关键特点基础建造者模式严格分步骤构造复杂对象(如计算机组装)分离构建过程与表示,通过指挥者控制流程,支持多态化构建扩展建造者模式包含可选参数的对象构造(如用户信息)链式方法设置参数,支持必选/可选字段分离,可添加构建校验逻辑线程安全建造者模式多线程环境下的不可变对象(如配置类)使用方法保证原子性,构造器私有化防止外部修改链式调用简化版。

keep simple 816
上一篇: 创建型-原型模式
下一篇: 结构型-桥接模式
三易的博客
博客等级 码龄15年 42粉丝 89原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值