前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >设计模式(十):建造者模式

设计模式(十):建造者模式

作者头像
xujjj
发布于 2019-07-30 11:58:55
发布于 2019-07-30 11:58:55
50700
代码可运行
举报
文章被收录于专栏:IT界的泥石流IT界的泥石流
运行总次数:0
代码可运行

什么是建造者模式

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

建造者模式的应用场景

在软件系统开发过程中,我们常常会需要一个创建过程复杂的对象,这个复杂的对象由多个子部件按照指定的步骤组合而成。由于需求的变化,这个复杂的对象各个部分经常面临着变化,但是将它们组合的步骤相对稳定。

如用户购买汽车,汽车由发动机、底盘、车身和电气设备等子部件组装而成,各个子部件有不同的种类,用户有定制化要求,由厂家进行定制化组装好直接交付用户,但组装步骤基本一致;如计算机主机由CPU,主板、内存、显卡等子部件组成,而子部件之间有不同的种类,但组装步骤基本一致;如Word文档由文字、图片等子部件组成,而子部分内容都不一致,但组装步骤基本一致。

以上这些产品都是由多个部件构成的,各个部件种类多样可供选择,但其创建步骤基本一致。这类产品使用工厂方法模式创建较为复杂,而建造者模式可以很好地适用这类产品的创建,它是将一个复杂的对象分解为多个简单的对象,按照一定的步骤构建而成。它将变与不变相分离,即产品的组成部分是不变的,但每一部分是可以灵活选择的。

建造者模式的优点如下:

  • 各个建造者相互独立,有利于系统的扩展。
  • 使用者不必知道产品内部的细节,便于控制细节风险。

建造者模式的缺点如下:

  • 产品必须有共同点,这限制了其使用范围。
  • 如果产品的内部变化复杂,会增加很多的建造者类。

建造者模式与工厂方法模式

  • 意图不同

在工厂方法模式里,无须关心产品是如何创建出来的,在乎产品能否正常生产;但在建造者模式中,它关注一个产品是如何被生产出来的,在乎各个部件的种类、生产以及装配顺序。简单地说,工厂方法模式在乎结果,建造者模式在乎过程。

  • 产品的复杂度不同

联系实际生活,我们可以想到工厂往往是生产单一性质的产品来提高效率和利润。工厂方法模式正是如此,生产单一性质的产品。而建造者模式,适用于由多个子部件组合而成的复杂产品的生产,如同苹果手机在全球有多个代工厂,最终将多个代工厂生成的子部件产品组合成苹果手机。

建造者模式的结构与实现

1、结构

建造者模式的角色如下。

1.指挥者角色(Director):它调用具体建造者对象中的产品部件构造与装配方法完成复杂对象的创建。

2.抽象建造者角色(Builder):它定义了产品部件创建接口以及具体创建产品的方法。

3.具体建造者角色(ConcreteBuilder):实现 Builder 接口,实现产品各个部件的创建方法。

4.产品角色(Product):它是由多个部件组成的复杂对象,由具体建造者来创建其各个部件。

2、实现

我们以用户购买汽车,汽车生产为例,简单描述实现过程。根据建造者模型的架构,我们需要生产指挥者——经理、生产抽象建造者——工人、生产具体建造者——汽车工人、生产产品——汽车。代码如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//指挥者:经理
public class Manager {
  private Worker worker;
  
  public Manager(Worker worker) {
    this.worker = worker;
  }
  
  public Car createProduct() {
    worker.buildColor();
    worker.buildConfiguration();
    worker.buildTyre();
    return worker.createProduct();
  }
}
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//抽象建造者:工人
public abstract class Worker {
  
  protected Car car = new Car();//产品对象
  
  public abstract void buildColor();//创建汽车颜色
  public abstract void buildConfiguration();//创建汽车配置
  public abstract void buildTyre();//创建汽车轮胎
  
  public Car createProduct() {
    return car;
  }
}
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//具体建造者:汽车工人
public class ConcreteCarWorker extends Worker {

  @Override
  public void buildColor() {
    car.setColor("黑色");
  }

  @Override
  public void buildConfiguration() {
    car.setConfiguration("高级配置");
  }

  @Override
  public void buildTyre() {
    car.setTyre("贵一点的轮胎");
  }
}
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//产品:车子
public class Car {
  private String color; //车身颜色
  private String configuration; //车配置
  private String tyre; //车轮胎
  
  public String getColor() {
    return color;
  }
  public void setColor(String color) {
    this.color = color;
  }
  public String getConfiguration() {
    return configuration;
  }
  public void setConfiguration(String configuration) {
    this.configuration = configuration;
  }
  public String getTyre() {
    return tyre;
  }
  public void setTyre(String tyre) {
    this.tyre = tyre;
  }
  @Override
  public String toString() {
    return "Car [color=" + color + ", configuration=" + configuration + ", tyre=" + tyre + "]";
  }
  
}
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//测试类
public class Test {

  public static void main(String[] args) {
    Worker carWorker = new ConcreteCarWorker();
    Manager manager = new Manager(carWorker);
    Car car = manager.createProduct();
    System.out.println(car.toString());
  }
}
运行结果如下:
Car [color=黑色, configuration=高级配置, tyre=贵一点的轮胎

以上就是今天《建造者模式》的讲解,良好的代码风格需要长期不断的积累学习。各位读者大人若有问题,欢迎后台留言,我将第一时间回复!

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-07-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 IT界的泥石流 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
JavaScript 设计模式学习第十篇-建造者模式
建造者模式(Builder Pattern)又称生成器模式,分步构建一个复杂对象,并允许按步骤构造。同样的构建过程可以采用不同的表示,将一个复杂对象的 构建层与其表示层分离。
越陌度阡
2020/11/26
3330
JavaScript 设计模式学习第十篇-建造者模式
建造者模式【建造者模式设计模式】
指将一个复杂对象的构造与它的表示分离,使同样的构建过程可以创建不同的表示,这样的设计模式被称为建造者模式。它是将一个复杂的对象分解为多个简单的对象,然后一步一步构建而成。它将变与不变相分离,即产品的组成部分是不变的,但每一部分是可以灵活选择的。
高大北
2022/06/14
4770
Java设计模式-建造者模式 理论代码相结合
继工厂模式后的建造者模式,也是java中常常能够见到的模式一种,应用场景也比较广,比较好用。 大家想了解的话,一起来看一看啦。😁 很喜欢一句话:“八小时内谋生活,八小时外谋生存” 你好,如果喜欢,请一起坚持!! 望别日与君相见时,君已有所成。 共勉 先看看图舒缓心情。😁 (我才不会告诉你我是一名喜欢蓝天白云大海的小小博主😀 ) Java设计模式-建造者模式 理论代码相结合 一、建造者模式 1)概念: 2)使用场景: 3)角色: 4)解释: 二、代码实例 2.1、题目 2.2、类图
宁在春
2022/10/31
2530
Java设计模式-建造者模式 理论代码相结合
23种设计模式之建造者模式
在软件开发过程中有时需要创建一个复杂的对象,这个复杂对象通常由多个子部件按一定的步骤组合而成。例如,计算机是由 CPU、主板、内存、硬盘、显卡、机箱、显示器、键盘、鼠标等部件组装而成的,采购员不可能自己去组装计算机,而是将计算机的配置要求告诉计算机销售公司,计算机销售公司安排技术人员去组装计算机,然后再交给要买计算机的采购员。
Java技术债务
2022/08/09
3580
23种设计模式之建造者模式
设计模式—— 十 一:建造者模式
建造者模式一步一步创建一个复杂的对象,它允许用户只通过指定复杂对象的类型和内容就 可以构建它们,用户不需要知道内部的具体构建细节。
三分恶
2020/07/16
6810
设计模式之建造模式
创建型模式之建造者模式 定义 建造者模式(Builder Pattern):将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。建造者模式是一种对象创建型模式。 简单说,建造者的功能就是先构造复杂对象的每一个部件,指挥者的功能就是将这些部件以一定的步骤组装起来,形成一个具有一定功能的产品或者对象。当然这个步骤是透明的对于客户端。 建造者模式一步一步创建一个复杂的对象,它允许用户只通过指定复杂对象的类型和内容就可以构建它们,用户不需要知道内部的具体构建细节。建造者模式结构如图8-2所示
爱撒谎的男孩
2018/05/25
4960
设计模式5之建造者模式
一个复杂的对象往往由多个子部件按一定的步骤组成。例如,汽车由发动机、轮胎、方向盘等部件组成的。
Lvshen
2022/05/05
1660
设计模式5之建造者模式
Java二十三种设计模式-建造者模式(4/23)
建造者模式(Builder Pattern)是一种创建型设计模式,用于创建一个复杂的对象,同时允许用户只通过指定复杂对象的类型和内容就能构建它们,它将对象的构建和表示分离,使得相同的构建过程可以创建出不同的表示。
正在走向自律
2024/12/18
1160
Java二十三种设计模式-建造者模式(4/23)
【Java设计模式】010-建造者模式
在软件开发过程中有时需要创建一个复杂的对象,这个复杂对象通常由多个子部件按一定的步骤组合而成。例如,计算机是由 CPU、主板、内存、硬盘、显卡、机箱、显示器、键盘、鼠标等部件组装而成的,采购员不可能自己去组装计算机,而是将计算机的配置要求告诉计算机销售公司,计算机销售公司安排技术人员去组装计算机,然后再交给要买计算机的采购员。
訾博ZiBo
2025/01/06
1090
设计模式的征途—6.建造者(Builder)模式
建造者模式又称为生成器模式,它是一种较为复杂、使用频率也相对较低的创建型模式。建造者模式为客户端返回的不是一个简单的产品,而是一个由多个部件组成的复杂产品。因为,没有人买车会只买一个方向盘或者轮胎,大家买的都是一辆包含轮胎、方向盘和发动机等多个部件组成的完整汽车。如何将这些部件组装成一辆完整的汽车并返回给用户,这是建造者模式需要解决的问题。
Edison Zhou
2018/08/20
3750
设计模式的征途—6.建造者(Builder)模式
设计模式——建造者模式
设计模式——建造者模式
Java架构师必看
2021/05/14
4420
设计模式——建造者模式
一起学习设计模式--06.建造者模式
没有人买车会只买一个轮胎或一个方向盘,大家买的都是一辆包含轮胎、方向盘和发动机等多个部件的完整汽车。如何将这些部件组装成一辆完整的汽车并返回给用户,这是建造者模式需要解决的问题。
独立观察员
2022/12/06
3410
一起学习设计模式--06.建造者模式
详解设计模式:建造者模式
建造者模式(Builder Pattern)也叫做生成器模式,是 GoF 的 23 种设计模式的一种,它将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
栗筝i
2022/12/02
3620
Java 设计模式系列(5) —— 建造者模式
建造者模式的定义: 讲一个复杂对象的构建与他的表示分离,使得同样的构建过程可以创建不同的表示。
求和小熊猫
2021/01/05
3010
Java 设计模式系列(5)  —— 建造者模式
设计模式 - 建造者模式
建建:这场疫情啊,让我明白了,有一个房子,能让你稳定住所;有一辆车,能让你出行无忧。
子乾建建-Jeff
2020/06/29
3580
设计模式 - 建造者模式
Carson带你学设计模式:建造者模式(Builder Pattern)
前言 今天Carson来全面总结最常用的设计模式 - 建造者模式。 Carson带你学设计模式系列文章 Carson带你学设计模式:这是一份全面 & 详细的设计模式学习指南 Carson带你学设计模式:单例模式(Singleton) Carson带你学设计模式:简单工厂模式(SimpleFactoryPattern) Carson带你学设计模式:工厂方法模式(Factory Method) Carson带你学设计模式:抽象工厂模式(Abstract Factory) Carson带你学设计
Carson.Ho
2022/03/25
2520
Carson带你学设计模式:建造者模式(Builder Pattern)
设计模式之建造者模式
本文由老王家组装电脑引出——建造者设计模式,详细介绍建造者模式的基本概念和实现代码,为了便于理解建造者模式,我们会对实际应用中的典型案例进行介绍。最后对比工厂模式和建造者模式之间的区别,让我们在实际使用时能更加灵活的选择设计模式。
程序员田同学
2022/08/01
2540
23种设计模式之建造者模式
建造者模式又叫做生成器模式,是23种设计模式中的一种创建型模式。建造者模式,顾名思义,就是为创建对象而生的模式。
VV木公子
2018/08/13
7K0
23种设计模式之建造者模式
Java设计模式(四)之创建型模式:建造者模式
Builder:抽象建造者。它声明为创建一个Product对象的各个部件指定的抽象接口。 ConcreteBuilder:具体建造者,实现Builder抽象接口,构建和装配各个部件,定义并明确它所创建的表示,并提供一个检索产品的接口。 Director:指挥者。构建一个使用Builder接口的对象。它主要是用于创建一个复杂的对象,它主要有两个作用,一是:隔离了客户与对象的生产过程,二是:负责控制产品对象的生产过程。 Product:产品角色。表示被构造的复杂对象。ConcreteBuilder创建该产品的内部表示并定义它的装配过程,包含定义组成部件的类,包括将这些部件装配成最终产品的接口。
全栈程序员站长
2021/04/09
5390
Java设计模式(四)之创建型模式:建造者模式
对象心思过于多变,工厂模式满足不了?用建造者模式啊!
我们知道,常见的设计模式通常分为三大类:创建型模式、行为型模式、结构型模式。今天我们来聊聊创建型模式中的建造者模式,关于它的使用场景、优缺点、组成部分、实战实例讲解以及在JDK中的运用。
程序新视界
2021/12/07
4650
对象心思过于多变,工厂模式满足不了?用建造者模式啊!
相关推荐
JavaScript 设计模式学习第十篇-建造者模式
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验