关键词:
建造者模式和工厂模式有点类似。所以建议复习一下工厂模式的文章 工厂模式小结
1. 适用场景
建造者模式,跟工厂模式一样,对客户端屏蔽了产品实现的细节,对外只呈现一个最终的产品。
与工厂模式不太一样的是:
1). 该产品相对于工厂模式的产品更为复杂,通常是由好几个模块组装而成;
2). 模块的生成顺序是稳定的;或者说,可以通过建造者模式来指定模块的生成顺序。比如组装一台PC,可以指定按顺序买显示器,机箱,主板,CPU,内存,SSD,键盘等等。
2. 结构分析
Builder,建造者,通常是个接口或抽象类。定义了一系列的模块生产方法,以及最终返回产品的方法。
ConcreteBuiler,具体的建造者。Builder的实现类,实现对各个模块的生产和最终返回的产品。通过实现不同的建造者,可以扩展不同的产品。
Director,指挥者,指挥建造者干活的类。在这里,可以指定建造者的生产顺序。
Product,最终生产出来的产品。不同的Builder应该会生产不同的Product.
写到这里,突然发现,Builder就像是建筑工人,而Director就像是工头。不同场景下的工人,刷墙的方式不一样,但刷墙的顺序是一样的。这时,工头就可以根据不同的场景,比如精装修和简装的房子,指挥不同的工人进行刷墙,而最终工人刷出来的墙都是【刷过的墙】,但当然不一样(精装和简装)。
3.来个例子
将之前工厂模式的例子稍微修改一下,生产一整套的运动服。
1 package com.khlin; 2 3 public class App { 4 5 public static void main(String[] args) { 6 Builder builder = new ManUtdBuilder(); 7 Director director = new Director(builder); 8 director.construct(); 9 SportSuit sportSuit = builder.getProduct(); 10 System.out.println(sportSuit.toString()); 11 } 12 } 13 14 class SportSuit { 15 String jersey; 16 17 String sneakers; 18 19 String socks; 20 21 public void setJersey(String jersey) { 22 this.jersey = jersey; 23 } 24 25 public void setSneakers(String sneakers) { 26 this.sneakers = sneakers; 27 } 28 29 public void setSocks(String socks) { 30 this.socks = socks; 31 } 32 33 @Override 34 public String toString() { 35 return "I m wearing " + jersey + " and " + sneakers + " and " + socks; 36 } 37 } 38 39 interface Builder { 40 41 void buildJersey(); 42 43 void buildSneakers(); 44 45 void buildSocks(); 46 47 SportSuit getProduct(); 48 } 49 50 class ManUtdBuilder implements Builder { 51 52 // builder持有产品 53 private SportSuit sportSuit = new SportSuit(); 54 55 @Override 56 public void buildJersey() { 57 this.sportSuit.setJersey("ManUtd Jersey"); 58 } 59 60 @Override 61 public void buildSneakers() { 62 this.sportSuit.setSneakers("Adidas Sneakers"); 63 } 64 65 @Override 66 public void buildSocks() { 67 this.sportSuit.setSocks("Adidas Socks"); 68 ; 69 } 70 71 @Override 72 public SportSuit getProduct() { 73 return this.sportSuit; 74 } 75 } 76 77 class Director { 78 Builder builder; 79 80 public Director(Builder builder) { 81 this.builder = builder; 82 } 83 84 public void construct() { 85 //指定建造的顺序 86 builder.buildJersey(); 87 builder.buildSneakers(); 88 builder.buildSocks(); 89 } 90 }
4. 建造者模式的变形
实际上创建一个模型,可能有多个参数。
参考:建造者模式的实践
建造者模式(builder)
建造者模式(Builder)C#设计模式系列:建造者模式(Builder)建造者模式(BuilderPattern) 状态模式C#设计模式——状态模式(StatePattern) 查看详情
设计模式建造者模式(简介|适用场景|优缺点|代码示例)(代码片段)
文章目录一、建造者模式简介二、建造者模式适用场景三、建造者模式优缺点四、建造者模式与工厂模式五、建造者模式代码示例1、学生类2、建造者抽象类3、建造者实现类4、教师类(非必须)5、测试类六、实例类和建造者类定... 查看详情
设计模式——建造者模式
设计模式(五)——建造者模式一、建造者模式简介1、建造者模式简介 建造者模式将一个复杂对象的构建与表示分离,使得同样的构建过程可以创建不同的表示。 建造者模式和抽象工厂模式... 查看详情
设计模式之————建造者模式
建造者模式1.什么是建造者模式?建造者模式属于创造型模式,它是将复杂对象的建造过程抽象出来,使这个抽象过程的不同实现方法可以构造出不同表现的对象。举例:普通房子和高楼,两者都很难建造,但也有相似点:打地... 查看详情
设计模式之建造者模式(创建型)(代码片段)
模式定义建造者模式属于23种设计模式中的创建型模式,可以理解为创建对象的一种很好的方法。所谓建造者模式就是将组件和组件的组件过程分开,然后一步一步建造一个复杂的对象。所以建造者模式又叫生成器模式。建造者... 查看详情
设计模式—建造者模式(builder)(代码片段)
title:设计模式—建造者模式建造者模式(Builder)是一步一步创建一个复杂的对象,它允许用户只通过指定复杂对象的类型和内容就可以构建它们,用户不需要知道内部的具体构建细节。建造者模式属于对象创建型模式。我们获得一... 查看详情
java设计模式-建造者模式
建造者模式概述建造者模式是较为复杂的创建型模式,它将客户端与包含多个组成部分(或部件)的复杂对象的创建过程分离,客户端无须知道复杂对象的内部组成部分与装配方式,只需要知道所需建造者的类型即可。它关注如... 查看详情
设计模式之建造者模式
1定义建造者模式(BuilderPatten):将一个复杂对象的构建与他的表示分离,使得同样的构建过程可以创建不同的表示。建造者模式用于一步一步创建一个复杂的对象,他允许用户只通过指定复杂对象的类型和内容进行构建,用户... 查看详情
大话设计模式-建造者模式(代码片段)
建造者模式建造者模式又称生成器模式,将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。建造者模式主要用于创建一些复杂的对象,这些对象内部构构建间的构造顺序通常是稳定的,但对象内... 查看详情
设计模式建造者模式
建造者模式建造者模式,将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。在建造事物时,如果发现事物的内部建造的顺序是保持不变的,并且多个事物之间的建造过程也是一致的那么就可以使... 查看详情
设计模式:学习笔记——建造者模式
设计模式:学习笔记(4)——建造者模式概述建造者模式 建造者模式是较为复杂的创建型模式,它将客户端与包含多个组成部分(或部件)的复杂对象的创建过程分离,客户端无须知道复杂对象的内部组成部分与装配方式,只... 查看详情
建造者模式
建造者模式的定义建造者模式(BuilderPattern)也叫做生成器模式,其定义如下:Separatetheconstructionofacomplexobjectfromitsrepresentationsothatthesameconstructionprocesscancreatedifferentrepresentations.(将一个复杂对象的构建与它的表示分离,使得同样... 查看详情
建造者模式
设计模式之建造者设计模式(也叫生成器模式)建造者模式就是将一个复杂对象的构建与他的表示分离,使得同样的构建过程可以创建不同的表示1:使用建造者模式的话,它封装了一个产品的构造过程,并且允许按照预定的步骤构... 查看详情
建造者模式
...的表示分离,使得同样的构建过程可以创建不同的表示。建造者模式与抽象工厂模式相似,也用来创建复杂对象。主要区别是建造者模式着重一步步构造一个复杂对象,而抽象工厂模式着重于多个系列的产品对象。二、角色抽象... 查看详情
建造者模式
建造者模式(Builder):将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。如果我们用了建造者模式,那么用户就只需要指定需要建造的类型就可以得到它们,而具体建造的过程和细节就不需要知... 查看详情
建造者模式
建造者模式将一个复杂对象的构建与其表示分离。将复杂对象进行框架化,将同类的对象编造进同一个制造流程。同类·对象会有一样的框架。而由于各部分的实现细节有所不同,所生产出来的产品会有所不同。从而有不同的·... 查看详情
java设计模式3.建造者模式原型模式
建造者模式一个产品常有不同的组成部分作为产品的零件,有些情况下,一个对象会有一些重要的性质,在它们没有恰当的值之前,对象不能作为一个完整的产品使用,有些时候,一个对象的一些性质必须按照某个顺序赋值才有... 查看详情
设计模式—建造者模式
1建造者模式 将一个复杂的对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。 建造者返回给客户一个完整的产品对象,而客户端无须关心该对象所包含的属性和组建方式,这就是建造者模式的设... 查看详情