设计模式——建造模式

设计模式——建造者 最近的心得,我发现学一门设计模式,不管你是否能立刻理解它,第一最要紧的是要记住两个东西。1、它是属于什么范畴的设计模式。2、记住UML图。这两个是打开这个设计模式之门的金钥匙!为什么这么讲?因为刚刚学新的设计模式,如果一味的埋头在文字中,思想中,代码编写的例子中,如果你这个设计模式又不是看的很懂,实在是会让人晕头转向看的吐血身亡。结果在身亡前,你都不知道这个设计模式干什么用,也不知该怎么去写。心得 阅读详情

以下是读《设计模式——可复用面向对象软件的基础》的读书笔记。

BUILDER生成器

1、 意图

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

2、 适用性

在以下情况下使用Builder模式

  •  当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时。
  • 当构造过程必须允许被构造的对象有不同的表示时。

3、 结构

此模式结构如下图所示




4、 参与者

Builder
            ——为创建一个Product对象的各个部件指定抽象接口。

ConcreteBuilder
            ——实现Builder的接口以构造和装配该产品的各个部件。
            ——定义并明确它所创建的表示。
            ——提供一个检索产品的接口。

Director  
           ——构造一个使用Builder接口的对象。

Product   
          ——表示被构造的复杂对象。ConcreteBuilder创建该产品的内部表示并定义它的装配过程。
          ——包含定义组成部分的类,包括将这些部件装配成最终产品的接口。

5、 协助

  •  客户创建Director对象,并用它所想要的Builder对象进行配置。
  • 一旦产品部件被生成,导向器就会通知生成器。
  • 生成器处理导向器的请求,并将部件添加到该产品中。
  • 客户从生成器中检索产品。

下面的时序图说明了Builder和Director是如何与一个客户协作的。


6、 效果

下面是Builder的主要效果:

1)它使你可以改变一个产品的内部表示             Builder对象提供给导向器一个构造产品的抽象接口。该接口使得生成器可以隐藏这个产品的表示和内部结构。它同时也隐藏了该产品是如何装配的。

2)它将构造代码和表示代码分开        Builder模式通过封装一个复杂对象的创建和表示方法提高了对象的模块性。客户不需要知道定义产品内部结构的类的所有信息;这些类不出现在Builder代码中。

3)它使你可对构造过程进行更精细的控制        Builder模式与一下子就生成产品的创建型式不同,它是在导向者的控制下一步一步构造产品的。仅当该产品完成时导向者才从生成器中取回它。因此,Builder接口相比其他创建型模式能更好地反映产品的构造过程。

7、 实现

通常有一个抽象的Builder类为导向者可能要求创建的每一个构件定义一个操作。这些操作缺省情况下什么都不做。一个ConcreteBuilder类对它有兴趣创建的构件重定义这些操作。

以下是其他一些要考虑的实现问题。

1)装配和构造接口        生成器逐步地构造它们的产品。因此Builder类接口必须足够普遍,以便为各种类型的具体生成器构造产品。

2)为什么产品没有抽象        通常情况下,由具体生成器生成的产品,它们的表示相差很大,所以给不同的产品给以公共父类没有太大意义。

3)在Builder中缺省的方法为空         生成方法故意不声明为纯虚成员方法,而是把它们定义为空方法,这使得客户只重定义他们感兴趣的操作。

8、 相关示例

Builder

package com.examples.pattern.builder;

public interface PersonBuilder {
	
	public void buildHead();
	public void buildBody();
	public void buildFoot();
	
	public Person getPerson();

}
ConcreteBuilder
package com.examples.pattern.builder;

public class ManBuilder implements PersonBuilder {

	Person person;

	public ManBuilder() {
		this.person = new Man();
	}

	@Override
	public void buildBody() {
		person.setBody("构建Man的Body");
	}

	@Override
	public void buildFoot() {
		person.setFoot("构建Man的Foot");
	}

	@Override
	public void buildHead() {
		person.setFoot("构建Man的Head");
	}

	@Override
	public Person getPerson() {
		// TODO Auto-generated method stub
		return null;
	}

}
Director
package com.examples.pattern.builder;

public class PersonDirector {

	
	private PersonBuilder pb;
	public PersonDirector(PersonBuilder pb){
		this.pb = pb;
	}
	
	public void construct(){
		pb.buildHead();
		pb.buildBody();
		pb.buildFoot();
	}

}
Product
package com.examples.pattern.builder;

public class Person {

	private String head;
	private String body;
	private String foot;

	public String getHead() {
		return head;
	}

	public void setHead(String head) {
		this.head = head;
	}

	public String getBody() {
		return body;
	}

	public void setBody(String body) {
		this.body = body;
	}

	public String getFoot() {
		return foot;
	}

	public void setFoot(String foot) {
		this.foot = foot;
	}

}
package com.examples.pattern.builder;

public class Man extends Person {

}
Client
package com.examples.pattern.builder;

public class Client {

	public static void main(String[] args) {
		
		ManBuilder manBuilder = new ManBuilder();
		PersonDirector director = new PersonDirector(manBuilder);
		director.construct();
		Person person = manBuilder.getPerson();
		System.out.println(person.getHead());
		System.out.println(person.getBody());
		System.out.println(person.getFoot());
	}

}







9、 相关模式

Abstract Factory与Builder相似,因为它也可以创建复杂对象。主要区别是Builder模式着重于一步一步构造复杂对象;而Abstract Factory着重于多个系列的产品对象(简单的或复杂的)。Builder在最后的一步返回产品,而对于Abstract Factory来说,产品是立即返回的。



建造者设计模式-Java实现 建造者设计模式是一种创建型设计模式,它将一个复杂对象的构建过程与其表示分离,使得同样的构建过程可以创建不同的表示。这种模式通常用于创建具有多个可选参数的对象,避免使用大量的构造函数或复杂的对象初始化过程。建造者设计模式是一种非常实用的创建型设计模式,适用于创建具有多个可选参数的复杂对象。通过将对象的构建过程与其表示分离,建造者模式提高了代码的可读性和灵活性。在 Java 中,我们可以通过静态内部类的方式实现建造者模式,使得对象的创建过程更加简洁和直观。 阅读详情

相关推荐

设计模式C++实现(6)——建造者模式

软件领域中的设计模式为开发人员提供了一种使用专家设计经验的有效途径。设计模式中运用了面向对象编程语言的重要特性:封装、继承、多态,真正领悟设计模式的精髓是可能一个漫长的过程,需要大量实践经验的积累。最近看设计模式的书,对于每个模式,用C++写了个小例子,加深一下理解。主要参考《大

wuzhekai的专栏 2万+

设计模式之——建造模式

1.将构造复杂对象的过程和组成对象的部件解耦。就像攒电脑一样,不管什么品牌的配件,只要兼 容就可以装上;同样,一样的配件,可以有好多组装的方式。这是对降低耦合、提高可复用 性精神的一种贯彻。 来看看建造模式的组成吧。 1) 抽象建造者角色:这个角色用来规范产品对象的各个组成成分的建造。一般而言,此角 色独立于应用程序的业务逻辑。 2) 具体建造者角色:担任这

ShaderJoy 的兴趣技术杂货铺 1737

细聊Oracle通过ODBC数据源连接SQL Server数据库

    类似文章搜索引擎上有很多,内容大致相同,今天所谓细聊是因为我在借鉴这些文章时候走了些弯路,所以写此文,为自己备忘,同时如果能为初涉此处知识点的小伙伴提供些帮助就更好了,废话不多说。    我的应用场景:    项目系统使用oracle数据库,与客户的第三方系统供应商实现资源共享,对方为sql server数据库;    我的测试开发环境为64bitwin7PC机,本机上装有64位Oracl...

xueren_83的博客 1万+

设计模式-创建型模式

创建型设计模式抽象了实例化过程。 他们帮助一个系统独立于如何创建、组合和表示它的那些对象。一个类创建型模式使用继承改变被实例化的类,而一个对象创建型模式将实例化委托给另一个对象。 这种模式有两个主旋律:第一,它们都将关于该系统使用哪些具体的类的信息封装起来。第二,他们隐藏了这些类的实例是如何被创建和放在一起的。整个系统关于这些对象所知道的是由抽象类所定义的接口。 Abstract Factory (抽象工厂)---对象创建型模型 1.意图 提供一个接口以创建一系列相关或相互依赖的对象,而无须指定他

ljz880812的博客 657

别再搞混了!MATLAB通信仿真中EbN0转SNR的保姆级公式推导与避坑指南

本文深入解析MATLAB通信仿真中EbN0与SNR转换的核心公式,揭示数字仿真与理论系统的关键差异。通过真实案例展示错误参数设置导致的隐蔽问题,并提供完整的参数自查清单和正确实现代码,帮助工程师和学生避免常见错误,确保仿真结果准确可靠。

weixin_28746223的博客 348

Amesim基础篇-元件详解-流体库管路

Amesim基础篇-元件详解-流体库管路

2201_75375391的博客 4520

23种设计模式-建造者模式

1.产生背景 2.概念 3.目的 4.解决方案 5. 类图 6.优缺点 优点: 缺点: 7.现实场景 1.产生背景 为什么需要建造者模式 建造者模式仍然是对上一节设计模式(抽象工厂模式)的改进; 抽象工厂模式侧重一个工厂可以创建一组相关的对象;但是这组相关对象是平等地位,没有主次之分,也没有整体与部分的概念,如何使用由客户决定; 但是,现实中有一些对象...

老杨叔叔 1487

机器视觉学习(七)—— 卷积、边缘和滤波器

卷积运算、垂直边缘与水平边缘、滤波器

歆歆~黯了 2740

设计模式学习笔记--原型模式

一.简介 原型模式是指使用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。简单来说,就是通过一个对象,拷贝出一个新的对象,这个对象保持和被拷贝对象相同的状态,我们可以直接在这个基础上进行修改,而不必重新初始化一个对象,再进行相关更改。 原型模式UML图如下: 二.原型模式的

puppet_master的专栏 925

应急响应-勒索病毒典型处置案例

服务器感染Globelmposter勒索病毒 事件背景 2020年5月,某公司内外服务器遭遇勒索病毒攻击,应急响应工程师在抵达现场后,对包含服务器在内的13太机器进行系统排查和日志分析。 事件处置 勒索病毒初步判定 首先,对其中一台感染勒索病毒的主机A(源地址为192.168.111.129)进行排查,通过勒索信确认为GlobeImposter勒索病毒,如图所示。 在本地桌面及磁盘发现加密文件后缀为.RESERVE,如图所示。 系统排查 主机账号 通过

qq_50765147的博客 2458

SAP 系统和银行系统通过 SM2 加密算法进行集成

SM2 是基于椭圆曲线离散对数问题(ECDLP)的一种公钥密码算法。椭圆曲线加密的核心原理,是利用了一个数学难题:在椭圆曲线群上,已知曲线上两点的运算结果,逆向推导出这两个点的具体信息是非常困难的。这样的复杂度使得基于椭圆曲线的密码体制比传统的 RSA 更加难以破解。在 SM2 加密中,公钥和私钥的生成与传统的椭圆曲线加密类似。选择一个椭圆曲线和一个基点 P。使用私钥 d,计算公钥 P’ = d * P。私钥 d 保密,而公钥 P’ 可公开分发,用于加密数据。

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

彻底搞懂设计模式DesignPattern-建造者模式

基本介绍 建造者模式(Builder Pattern) 又叫生成器模式,是一种对象构建模式。它可以将复杂对象的建造过程抽象出来(抽象类别),使这个抽象过程的不同实现方法可以构造出不同表现(属性)的对象。 建造者模式 是一步一步创建一个复杂的对象,它允许用户只通过指定复杂对象的类型和内容就可以构建它们, 用户不需要知道内部的具体构建细节。 在用户不知道对象的建造过程和细节的情况下就可以直接创建复杂的对象。 方便用户创建复杂的对象(不需要知道实现过程) 代码复用性 & 封装性(将对象构建过程和细节进

Ping 421

YOLO26改进策略【Neck】| CVPR 2024 MFM(Modulation Fusion Module,调制融合模块):动态特征加权融合,突出关键特征抑制冗余

本文主要利用DCMPNet中的 MFM 模块优化 YOLO26 的目标检测网络模型。模块通过动态调制特征融合过程,实现了对多尺度、跨层级特征的智能聚合。将其应用于的改进过程中,针对目标检测中边界特征与语义信息的互补性需求,缓解网络中浅层细节与深层语义融合不足的问题。Depth Information Assisted Collaborative Mutual Promotion Network for Single Image Dehazing在图像去雾网络中,不同层级和类型的特征包含着互补的信息(如浅层的

Limiiiing的博客 221

设计模式——建造者模式

建造者模式(Builder Pattern)是一种创建型设计模式,它通过将一个复杂对象的构建过程分解成多个简单的步骤,从而使得不同的构建过程可以生成不同的表现形式。建造者模式的关键思想是使用相同的构建步骤来创建不同的对象表示,它适用于构建过程需要多个步骤并且可能有多个不同表现形式的场景。建造者模式通过将复杂对象的构建过程分离成多个步骤,使得客户端可以通过不同的建造者来构建出不同的对象。它非常适用于那些构建过程需要多个步骤的复杂对象,能够有效地提高系统的灵活性和可维护性。

AIAIAIXIAO_的博客 1856

FlashBootloader01-基于UDS的Flash Bootloader【架构篇】

文章目录1 Flash Bootloader的依赖项2 Flash Bootloader中使用的UDS的主要功能3 Flash Bootloader更新固件3.1 初始化MCU3.2 刷写流程 1 Flash Bootloader的依赖项 通常Flash Bootloader由以下四方面组成: UDS协议 上位机「编写Bootloader Sequence」 通信驱动(如CAN ) Flash Driver 2 Flash Bootloader中使用的UDS的主要功能 1. 10 02服务 客户端

3591

SAP B1中文培訓教材_SDK

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

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

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

Fatter$hday的博客 1609

深度学习工具包 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")

设计模式之建造者模式

者模式的场景中,一般产品类和建造者类是比较稳定的,因此,将主要的业务逻。的差异性很大,则不适合使用建造者模式,因此其使用范围受到一定的限制。1)抽象建造者类(Builder):这个接口规定要实现复杂对象的哪些部分的创建,并。1)建造者模式所创建的产品一般具有较多的共同点,其组成部分相似,如果产品之间。2)在建造者模式中,客户端不必知道产品内部组成的细节,将产品本身与产品的创。使用建造者模式可以有效的封装变化,在使用建造。1)创建的对象较复杂,由多个部件构成,各部件面临着复杂的变化,但构件间的。

liang8999的博客 1153

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

Statistics and Machine Learning Toolbox

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

【深入理解设计模式】建造者设计模式

建造者设计模式(Builder Pattern)是一种创建型设计模式,旨在通过将复杂对象的构建过程拆分成多个简单的步骤,使得相同的构建过程可以创建不同的表示。该模式允许您使用相同的构建过程来创建不同的对象表示。

guojiaqi_的博客 1348

设计模式——建造者设计模式(创建型)

本文详细介绍了建造者设计模式,这是一种创建型设计模式,旨在将复杂对象的构建过程与其表示分离,便于创建不同表示。文中阐述了其设计意图,如隐藏创建细节、提升代码可读性和可维护性,并通过构建电脑的示例加以说明。接着展示了建造者模式的结构,包括抽象建造者、具体建造者、指挥者和产品角色。还提供了 Java 实现示例,分析了其特点与好处,探讨了适用场景,包括适合与不适合的情况,并通过风控请求类的实战示例展示了其优势。最后,提出了结合责任链与建造者构建不同风险场景组合的思考方向。

庄小焱 1327

【设计模式】建造者模式

建造者模式(Builder Pattern) 是将一个复杂对象的构建过程与它的表示分离, 使得同样的构建过程可以创建不同的表示,属于创建型模式。使用建造者模式对于用户而言只需指定需要建造的类型就可以获得对象,建造过程及细节不需要了解。 建造者模式适用于创建对象需要很多步骤,但是步骤的顺序不一定固定。如果一个对象有非常复杂的内部结构(很多属性),可以将复杂对象的创建和使用进行分离。 建造者模式的设计...

通往神秘的道路的专栏 1417

设计模式之——建造者模式

设计模式: 前辈们对代码开发经验的总结,是解决特定问题的一系列套路。它不是语法规定。而是一套用来提高代码可复用性、可维护性、可读性、稳健性、以及安全性的解决方案 设计模式的本质是面向对象设计原则的实际运用,是对类的封装性、继承性和多态性以及类的关联关系和组合关系的充分理解。 正确使用设计模式具有以下优点: 可以提高程序员的思维能力、编程能力和设计能力。 使程序设计更加标准化、代码编制更加I程化,使软件开发效率大大提高,从而缩短软件的开发周期。 使设计的代码可重用性高、可读性强、可靠性高、灵活性.

技匠而已 1万+

String核心设计模式——建造者模式

我们假设一个快餐店的商业案例,其中,一个典型的套餐可以是一个汉堡(Burger)和一杯冷饮(Cold drink)。建造者模式是一种创建型设计模式,它的主要目的是将一个复杂对象的构建过程与其表示相分离,从而可以创建具有不同表示形式的对象。:负责调用建造者的方法来构建产品,指导者并不了解具体的构建过程,只关心产品的构建顺序和方式。:实现抽象建造者接口,具体确定如何构建产品的各个部分,并负责返回最终构建的产品。:定义了构建产品的抽象接口,包括构建产品的各个部分的方法。接口的实体类,以及一个表示食物包装的。

hang_sa_mu的博客 1324

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

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

keep simple 816
上一篇: 设计模式——抽象工厂模式
下一篇: 设计模式——工厂方法
HingKwan
博客等级 码龄17年 51粉丝 86原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值