设计模式(八)——建造者模式

突破编程_C++_设计模式(建造者模式) C++ 设计模式:建造者模式 阅读详情

一、什么是建造者模式
建造者模式:是将一个复杂的对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
工厂类模式提供的是创建单个类的模式,而建造者模式则是将各种产品集中起来进行管理,用来创建复合对象,所谓复合对象就是指某个类具有不同的属性,其实建造者模式就是前面抽象工厂模式和最后的Test结合起来得到的。
建造者模式通常包括下面几个角色:
1、Builder:给出一个抽象接口,以规范产品对象的各个组成成分的建造。这个接口规定要实现复杂对象的哪些部分的创建,并不涉及具体的对象部件的创建。
2、ConcreteBuilder:实现Builder接口,针对不同的商业逻辑,具体化复杂对象的各部分的创建。 在建造过程完成后,提供产品的实例。
3、Director:调用具体建造者来创建复杂对象的各个部分,在指导者中不涉及具体产品的信息,只负责保证对象各部分完整创建或按某种顺序创建。
4、Product:要创建的复杂对象。
应用实例:
1、去肯德基,汉堡、可乐、薯条、炸鸡翅等是不变的,而其组合是经常变化的,生成出所谓的"套餐"。 
2、JAVA 中的 StringBuilder。
使用场景: 
1、需要生成的对象具有复杂的内部结构。 
2、需要生成的对象内部属性本身相互依赖。
与工厂模式的区别是:建造者模式更加关注与零件装配的顺序。


二、实例演示
这里以游戏开发中人物的构造过程为例。在游戏中创建一个形象时,需要对每个部位进行创建。简化而言,需要创建头部,身体和四肢。
1、Product(要创建的复杂对象):
建立一个人物对象Person

  1. public class Person {  
  2.    
  3.     private String head;  
  4.     private String body;  
  5.     private String foot;  
  6.    
  7.     public String getHead() {  
  8.         return head;  
  9.     }  
  10.    
  11.     public void setHead(String head) {  
  12.         this.head = head;  
  13.     }  
  14.    
  15.     public String getBody() {  
  16.         return body;  
  17.     }  
  18.    
  19.     public void setBody(String body) {  
  20.         this.body = body;  
  21.     }  
  22.    
  23.     public String getFoot() {  
  24.         return foot;  
  25.     }  
  26.    
  27.     public void setFoot(String foot) {  
  28.         this.foot = foot;  
  29.     }  
  30. }  

2、Builder(给出一个抽象接口,以规范产品对象的各个组成成分的建造。这个接口规定要实现复杂对象的哪些部分的创建,并不涉及具体的对象部件的创建):

  1. public interface PersonBuilder {  
  2.     void buildHead();  
  3.     void buildBody();  
  4.     void buildFoot();  
  5.     Person buildPerson();//组装  
  6. }  

3、ConcreteBuilder(实现Builder接口,针对不同的商业逻辑,具体化复杂对象的各部分的创建。 在建造过程完成后,提供产品的实例):

  1. public class ManBuilder implements PersonBuilder {  
  2.    
  3.     Person person;  
  4.    
  5.     public ManBuilder() {  
  6.         person = new Person();//创建一个person实例,用于调用set方法  
  7.     }  
  8.    
  9.     public void buildBody() {  
  10.         person.setBody("建造身体部分");  
  11.     }  
  12.    
  13.     public void buildFoot() {  
  14.         person.setFoot("建造四肢部分");  
  15.     }  
  16.    
  17.     public void buildHead() {  
  18.         person.setHead("建造头部部分");  
  19.     }  
  20.    
  21.     public Person buildPerson() {  
  22.         return person;//返回一个person实例  
  23.     }  
  24.    
  25. }  

4、Director(调用具体建造者来创建复杂对象的各个部分,在指导者中不涉及具体产品的信息,只负责保证对象各部分完整创建或按某种顺序创建):

  1. public class PersonDirector {  
  2.     public Person constructPerson(PersonBuilder pb) {  
  3.         //按照 身体--->头部--->四肢 的顺序创建人物  
  4.         pb.buildHead();  
  5.         pb.buildBody();  
  6.         pb.buildFoot();  
  7.         return pb.buildPerson();  
  8.     }  
  9. }  

5、测试

[java] view plaincopyprint?

  1. public class Test {  
  2.     public static void main(String[] args) {  
  3.         PersonDirector pd = new PersonDirector();  
  4.         Person person = pd.constructPerson(new ManBuilder());  
  5.         System.out.println(person.getBody());  
  6.         System.out.println(person.getFoot());  
  7.         System.out.println(person.getHead());  
  8.     }  
  9. }  

三、总结

在《Effective Java》书中第二条,就提到“遇到多个构造器参数时要考虑用构建器”,其实这里的构建器就属于建造者模式,只是里面把四个角色都放到具体产品里面了。而建造者模式主要解决在软件系统中,有时候面临着"一个复杂对象"的创建工作,其通常由各个部分的子对象用一定的算法构成;由于需求的变化,这个复杂对象的各个部分经常面临着剧烈的变化,但是将它们组合在一起的算法却相对稳定。

ESD放电路径分析 当金属外壳接地情况下,大部分外部干扰信号将会通过外壳,外壳到接地点,再由接地点回到干扰信号的地,实现干扰信号的回流,这点不仅仅适用于​ESD,对于其他的RI类干扰,也同样适合。发现内部金属板跟外壳的搭接处存在较多的缝隙点,该缝隙点对于频率较高的信号能够实现较为理想的回流,但是对于频率没有那么高的信号,则较难以实现回流,我们尝试将这些缝隙用铜箔包裹住,充分降低该金属板跟外壳的接触阻抗​。我们分析,路径3其实是不期望的路径,我们最期望的路径是1,或者2的内部金属部件跟外壳良好接触情况下的路径。 阅读详情

相关推荐

三相逆变器双pi控制器参数如何调节_光伏逆变器短路特性简析

1前言短路故障相对于其他故障类型来说是比较常见的,不同的设备的短路故障,大了讲都一样,细了说各有千秋,今天我们主要聊聊光伏逆变器的短路特征。电力系统中的电源,传统意义是指的是并入电力系统的同步发电机。但随着分布式发电技术的发展,各种形式的发电装置并入电力系统。按照分布式电源并网的方式,我们大致可以分为以下三类:➤通过旋转电机和变流器并联并网的电源,主要指双馈风力发电系统;➤仅仅通过变流器...

weixin_39901404的博客 1732

设计模式之建造者模式

建造者模式1.简要概述2.模式结构3.实现代码4.优点好处5.缺点弊端6.应用场景7.应用示例 1.简要概述 建造者模式也可以叫做生成器模式。 建造者模式就是说首先封装一个对象的构造过程,然后按照这个过程步骤去构建这个对象实例。 建造者模式的本质就是分离了对象子组件的单独构建和装配过程,从而可以构造出更加复杂的对象。复杂对象就好比一部有待建造的手机,而对象中的属性就好比手机中的各个部件,所以建造对象的过程就好比是手机部件相互组合建造手机的过程。 对于复杂对象而言,它们的创建过程很复杂,因此我们想把这些过程

ProChick's Blog 1246

解决UE5像素流三大痛点:鼠标锁定/双光标/自动播放(附app.js魔改指南)

本文针对UE5像素流服务在实际应用中常见的鼠标锁定、双光标和自动播放三大交互痛点,提供了深入的技术分析和解决方案。通过详细解析app.js源码,指导开发者如何修改控制方案、修复光标显示以及实现静音自动播放,旨在提升Pixel Streaming应用的用户体验与专业度。

weixin_28025327的博客 382

java设计模式之建造者模式

一、什么是建造者模式 建造者模式:是将一个复杂的对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。 工厂类模式提供的是创建单个类的模式,而建造者模式则是将各种产品集中起来进行管理,用来创建复合对象,所谓复合对象就是指某个类具有不同的属性,其实建造者模式就是前面抽象工厂模式和最后的Test结合起来得到的。 建造者模式通常包括下面几个角色: 1、Builder:给出一个抽...

weixin_33748818的博客 154

李宏毅机器学习hw3

Homework 3 - Convolutional Neural Network 1作业概述 在food_11文件中有三个文件分别是training、validation、testing,打开training和validation可以看见总共有11种食物(0-10的类别编号),而testing是没有类别编号的。 然后用卷积神经网络对食物图片进行分类。 2导入用到的库 torch库 这个我弄了半天,直接pip总是timeout,用镜像源下下来又出现OSError: [WinError..

老问题的博客 4188

XS5018A TX ISP芯片同轴高清模拟输出图像处理芯片用户指南

当看门狗开启且系统异常,看门狗模块得不到喂狗信号时,自动产生看门狗复位信号,复位​​​​​​​。分量上与人眼对光谱的响应通常是有偏差的,通常通过一个色彩校正矩阵校正光谱响应的交叉效。但实际上由于电路的作用,复位模块对整个芯片及各个功能模块的复位进行统一管理,负责产生各个模块的软复位信。每个区域前景色可以在 16 个色表中查找,单个区域的前景色统一,各个区域的前。较弱的坏点被放大成刺眼的白点和明显的黑点,强烈推荐开启动态坏点校正功能。四种制式,通过寄存器配置,可以很方便的实现四种制式的切换、且可以对截止。

2403_88922712的博客 1959

Java设计模式—建造者模式(build)

目录 目的 应用实例 代码 目的 将一个复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表示。 应用实例 JAVA 中的 StringBuilder。 商品不同的套餐实际为不同的单件通过组合模式组合成的。 代码   package com.gary.designpattern.build; public class Person { p...

gary0917的博客 907

基于Xilinx XDMA 的PCIE通信

基于Xilinx XDMA 的PCIE通信 概述:   想实现基于FPGA的PCIe通信,查阅互联网各种转载…基本都是对PCIe的描述,所以想写一下基于XDMA的PCIe通信的实现(PCIe结构仅做简单的描述(笔记),了解详细结构移至互联网)。实践实践!!! 说明: 参考文档: PCI Express Base Specification Revision 3.0 PCI Express Base Specification Revision 5.0 pg195-pcie-dma PCI Express体系

Crazzy_M的博客 1万+

java设计模式-建造者设计模式

java设计模式-建造者设计模式 简单说一下(定义、举例) 什么是建造者模式:指将一个复杂对象的构造与他的表示分离,使同样的构建过程可以创建不 同的表示,他是将一个复杂的对象分解为多个简单的对象,然后一步步构建而成,换言之就是 他将变与不变相分离,即产品的组成部分是不变的,但是其每一部分是可以灵活选择的 举个栗子说明下:1)比如我们去肯德基吃麦当劳,薯条、汉堡、可乐、鸡翅等是不变的,他们 的组合是...

Thinkao 的博客 332

分布式计算Ray框架:从入门到精通完全教程

想象一下,你有一个机器学习模型要训练,数据集大到让你的笔记本电脑直冒烟;或者你需要并行跑几百个爬虫任务,但线程池和多进程搞得你头晕眼花。传统的单机计算已经hold不住这些场景,分布式计算应运而生。然而,传统的分布式框架(如Hadoop、Spark)要么配置复杂,要么对动态任务支持不佳。这时候,Ray闪亮登场!Ray是一个开源的分布式计算框架,专为高性能、灵活性和易用性而生。它最初由UC Berkeley的RISELab团队开发,目标是让开发者用最少的代码实现分布式任务。无论是数据处理、机器学习,还是仿真任务

大模型大数据攻城狮的专栏 1318

【气候极端指数】MATLAB计算各种气候极端指数

简介各类气候极端指数,及其MATLAB计算代码

WW、forever的博客 4917

设计模式学习笔记八:建造者模式(Builder Pattern)

设计模式学习笔记八:建造者模式(Builder Pattern)       1.概述     意图:将复杂对象的构建与表示分离,是同样的构建过程可以创建过程可以创建不同的表示。需要注意以下几点:     (1)。构建与表示分离:表明生成器模式的结构,构建过程被封装在导航器中,生成器则实现具体的表示。     (2)。同样的构建过程:生成器模式关注的是构建过程,即构建过程是

AlbenXie的博客 498

华为OD机试真题 新系统-等距二进制判断(C/C++/Py/Java/Js/Go)

华为OD机试 新系统真题【等距二进制判断】,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,以及在线OJ模拟做题。华为OD机试真题【等距二进制判断】

qq_45776114的博客 1087

设计模式之八 建造者模式

大家好。今天晚上让我扯扯建造者模式.. 什么是建造者模式呢?简单来说,一个对象往往是由很多部件组成的,而且这些部件的组成也有某些关系。那么怎么才能正确的产生对象呢?就用建造者模式了。 好比我们在KFC点了套餐,每份套餐都是由不同的东西组成的,比如饮料,主食之类的.我们可以通过创建者模式来模拟KFC点餐的效果。 按照惯例,我们要先看一下建造者模式的概念 建造者模式:将一个复杂对象的构造与它的

hwb1992 1152

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

深度学习工具包 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、封装性好:通过使用建造者模式,客户端代码只需关注指定需要的产品类型和建造步骤,而不必知道具体的建造细节。2、可扩展性强:可以增加新的建造者类,扩展产品的种类,且原有的代码无需修改。容易控制产品的构造过程:由于建造者负责对象构建的每一步骤,因此可以对构建过程逐步细化,并且更容易控制。3、遵循单一职责原则。

weixin_44917291的博客 369

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

全网最简单的Java设计模式【八】建造者模式-实战中最常用的设计模式之一

建造者模式(Builder Pattern)是一种创建型设计模式,用来将一个复杂对象的构建过程与其表示分离,使得同样的构建过程可以创建不同的表示形式。该模式特别适用于创建那些具有多个组成部分且构建步骤固定的复杂对象。在Java中,建造者模式通过定义一系列的构建步骤来逐步构造复杂对象,提高了代码的灵活性和可维护性。

技术管理修行 713

Statistics and Machine Learning Toolbox

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

PHP设计模式系列(八):建造者模式

建造者模式建造者模式(Builder Pattern):将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。建造者模式是一步一步创建一个复杂的对象,它允许用户只通过指定复杂对象的类型和内容就可以构建它们,用户不需要知道内部的具体构建细节。建造者模式属于对象创建型模式。根据中文翻译的不同,建造者模式又可以称为生成器模式。模式结构建造者模式包含如下角色: Builder:抽象建造者

qq_32300363的博客 844

设计模式应用八:建造者模式

qq_23725949的博客 152

设计模式学习笔记(八):建造者模式

1 建造者模式 1.1 定义 建造者模式:将一个复杂的对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。 建造者模式是一种对象创建型模式。 建造者模式是较为复杂的创建型模式,它将客户端与包含多个组成部分(或部件)的复杂对象的创建过程分离,客户端无须知道复杂对象的内部组成部分与装配方式,只需要知道所需的建造者类型即可。建造者模式关注一步一步地创建一个复杂对象,不同的具体建造者定义了不同的创建过程,且具体建造者相互独立,增加新的建造者非常方便,无须修改已有代码,系统具有较好的扩展性。 1.2 复杂

氷泠 537

JS 设计模式 八(建造者模式)

建造者模式 将一个复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表示。主要解决在软件系统中,有时候面临着"一个复杂对象"的创建工作,由于需求的变化,这个复杂对象的某些部分经常面临着剧烈的变化,一些基本部件不会变。所以需要将变与不变分离。与抽象工厂的区别:在建造者模式里,有个指导者(Director),由指导者来管理建造者,用户...

weixin_33672109的博客 119

java设计模式八(建造者模式)

java设计模式—建造者模式 一.概述 建造模式是指将多个简单的子模块一步一步构建成一个复杂的对象。在构建这个复杂对象时,可以根据不同的业务,选择不同的子模块,并且在构建的过程中,隐藏了子模块的内部逻辑。 二.模式示例: 我们以购物流程中的选择商品,填写收货人信息,在线支付为例,具体讲解模式的实现 1.创建订单抽象类 public abstract class Order...

我的博客 250

设计模式培训之八:建造者模式

摘要: 查看本人文章索引请通过http://www.cnblogs.com/seesea125/archive/2012/04/17/2453256.html 一、定义 将一个复杂对象的构造与它的表示分离,使同样的构建过程可以创建不同的表示。 二、应用场景 当一个产品需要复杂的构造,但是构造过程是稳定的,只是构造的对象有不同表示时,就可以使用建造模式。 三、代

dolphin98629的专栏 451

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

【设计模式】(八)–创建型模式–建造者模式 建造者模式【设计模式】(八)--创建型模式--建造者模式建造者模式定义构造者模式的优点构造者模式的使用场景构造者模式和工厂模式区别构造者模式简单实现 建造者模式定义 Separate the construction of a complex object from its representation so that the same constru...

lovesunren的专栏 264

两种语言实现设计模式(C++和Java)(八:建造者模式)

参考:http://c.biancheng.net/view/1354.html 建造者(Builder)模式的定义:指将一个复杂对象的构造与它的表示分离,使同样的构建过程可以创建不同的表示,这样的设计模式被称为建造者模式。它是将一个复杂的对象分解为多个简单的对象,然后一步一步构建而成。它将变与不变相分离,即产品的组成部分是不变的,但每一部分是可以灵活选择的。 建造者模式主要包括...

aozhimen9773的博客 259

C# 设计模式(八)建造者模式(unity演示)

1、引言 2、建造者模式详细介绍 2.1、定义 2.2、作用 2.3、解决的问题 2.4、模式的原理 2.5、类图实现 2.6、C#举例 3、建造者模式优缺点 4、适用场景 5、应用举例(unity) 6、总结 7、unity工程下载 1、引言   在软件开发的过程中,有时需要创建一个复杂对象,并且这个复杂对象由其各部分子对象通过一定的步骤组合而成。就像一台电脑...

对酒当歌﹏✍ 1204
上一篇: 设计模式(七)——工厂模式总结
下一篇: JDK动态代理机制
farmering
博客等级 码龄15年 18粉丝 23原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值