建造者

建造者模式

别说谁变了你拦得住时间么 提交于 2019-11-26 20:14:33
GOF给建造者模式的定义是: 将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。 来看看建造者模式的组成: 1.产品角色 :建造中的复杂对象、它要包含哪些定义组件的类,包括将这些组件装配成产品的接口。 2.抽象建造者角色 :这个角色用来规范产品对象的各个组成成分的建造。一般而言,此角色独立于应用程序的业务逻辑。 3.具体建造者角色 :担任这个角色的是与应用程序紧密相关的类,它们在指导者的调用下创建产品实例。这个角色在实现抽象角色提供的方法的前提下,达到完成产品组装,提供成品的功能。 4.指导者角色 :调用具体建造者角色以创建产品对象。指导者并没有产品类的具体知识,真正拥有产品类的具体知识是具体建造者对象。 来看看这些角色组成的类图: 建造者模式和工厂方法模式都是创建模式。下面通过代码来讲解来熟悉建造者模式: 产品角色: 1 package com.bluemsun.BuilderModel; 2 3 4 /** 5 * 产品类,一个Person的产品模型 6 * @author zhouxy 7 * 8 */ 9 public class PersonModel { 10 private Body body; 11 private Soul soul; 12 13 public Body getBody() { 14 return body; 15 } 16

建造者模式

喜夏-厌秋 提交于 2019-11-26 20:14:22
11.1 变化是永恒的 又是一个周三,快要下班了,老大突然拉住我,喜滋滋地告诉我:“牛叉公司很满意我们做的模型,又签订了一个合同,把奔驰、宝马的车辆模型都交给我们公司制作了,不过这次又额外增加了一个新需求:汽车的启动、停止、喇叭声音、引擎声音都由客户自己控制,他想什么顺序就什么顺序,这个没问题吧?” 看着老大殷切的目光,我还能说啥?非常肯定地点头,“没问题!”,加班加点做呗,“再苦再累就当自己二百五!再难再险就当自己二皮脸!与君共勉!”这句话说出了俺的心声。 那任务是接下来,又是一个时间紧,工程量大的项目,为什么是“又”呢?因为基本上每个项目都是如此,我该怎么来完成这个任务呢? 首先我们分析一下需求,奔驰、宝马都是一个产品,他们有共有的属性,牛叉公司关心的是单个模型的运行过程:奔驰模型A是先有引擎声音,然后再响喇叭;奔驰模型B是先启动起来,然后再有引擎声音,这才是牛叉公司要关心的,那到我们老大这边呢,就是满足人家的要求,要什么顺序就立马能产生什么顺序的模型出来,我就负责把老大的要求实现出来,而且还要是批量的,也就是说牛叉公司下单订购宝马A车模,我们老大马上就找我“生产一个这样的车模,启动完毕后,喇叭响一下”,然后我们就准备开始批量生产这些模型。由我生产出N多个奔驰和宝马车辆模型,这些车辆模型的都有run()方法,但是具体到每一个模型的run()方法中间的执行任务的顺序是不同的

建造者模式

强颜欢笑 提交于 2019-11-26 12:28:40
定义 将一个复杂对象的创建与它的表示(部件与装配细节)相分离,使得同样的创建过程可以创建不同的表示。 使用场景 可以将装配细节封装起来,调用者不必知道具体的产品的内部结构和产生过程。 多个部件,都装配到一个对象,不同的装配过程或者不同的装配顺序,产生不同的结果,可以使用该模式 实现方式 产品类 public class Product { private String partA; private String partB; private String partC; //Getter方法和Setter方法省略 } 抽象建造类,不同的建造过程实现Builder接口即可 public abstract class Builder { protected Product product=new Product(); public abstract void PartA(); public abstract void PartB(); public abstract void PartC(); public Product build() { return product; } } 具体建造者。实现抽象接口,构建和装配各个部件 public class ConcreteBuilder extends Builder{ public void PartA(){ ... } public

建造者模式

南楼画角 提交于 2019-11-26 11:06:06
建造者模式又称为生成期末数分布构建一个复杂对象,讲一个复杂的构建曾与其表示层分离 在工厂模式中构建的是完整的个体,而且不关心构建的过程,只需要了解构建结果 建造者模式: // 建造者,汽车部件厂家,提供具体零部件的生产 function CarBuilder({ color = 'white', weight = 0 }) { this.color = color this.weight = weight } // 生产部件,轮胎 CarBuilder.prototype.buildTyre = function(type) { switch (type) { case 'small': this.tyreType = '小号轮胎' this.tyreIntro = '正在使用小号轮胎' break case 'normal': this.tyreType = '中号轮胎' this.tyreIntro = '正在使用中号轮胎' break case 'big': this.tyreType = '大号轮胎' this.tyreIntro = '正在使用大号轮胎' break } } // 生产部件,发动机 CarBuilder.prototype.buildEngine = function(type) { switch (type) { case 'small': this

设计模式之建造者模式、模版方法

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