建造者模式

Kingsley Kingsley     2022-08-10     785

关键词:

建造者模式和工厂模式有点类似。所以建议复习一下工厂模式的文章 工厂模式小结

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建造者模式  将一个复杂的对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。  建造者返回给客户一个完整的产品对象,而客户端无须关心该对象所包含的属性和组建方式,这就是建造者模式的设... 查看详情