设计模式-创建型模式:建造者

简介: 设计模式-创建型模式:建造者

1、简介

建造者模式(Builder pattern)是一种对象创建型模式,它可以将复杂对象的创建过程抽象出来,使得创建过程独立于对象的组成部分,从而可以得到相同类型的不同对象

建造者模式通过分离了对象的构建和表示,使得同样的构建过程可以创建不同的表示,这样就可以得到多种不同的组合对象

2、组成

建造者模式主要由四类角色组成:

①产品(Product)角色:它是被构造的复杂对象,包含多个组成部件。

②抽象建造者(Builder)角色:它是一个抽象类或者接口,规范了建造复杂对象的各个部分的构建一般至少要有两个方法,一个是建造部件part1,一个是建造部件part2。

③具体建造者(Concrete Builder)角色:实现了抽象建造者的接口,构建和装配各个部件。

④指挥者(Director)角色:它负责安排复杂对象的建造次序,指导构建过程。它不涉及具体产品的信息,只负责保证对象各部分完整创建或按某种顺序创建

3、Concrete Builder and Director

需要注意的是,具体建造者和指挥者可以不一定要都有,它们是可选的

建造者模式的具体建造者和指挥者不一定要都有,原因如下:

  1. 指挥者主要是用于规定构建对象的细节,如果对象构建过程简单,不需要细节控制,那么就没有必要提供指挥者
  2. 具体建造者主要是实现构建对象的具体实现,如果具体实现已经确定,并且不需要其他变化,那么也没有必要提供具体建造者。

简单来说,在没有指挥者和具体建造者时,构建对象的过程是比较简单,而且不需要细节控制,所以不需要提供指挥者和具体建造者这两个角色。

4、优缺点

建造者模式具有以下优点

①隔离了具体组装过程和最终产品,使得相同的构建过程可以创建不同的产品对象

②将构建的具体过程和组成部分解耦,可以独立的改变和扩展构建过程和组成部分

③每一个具体建造者都相对独立,而且是可扩展的,因此可以很方便地替换具体建造者或增加新的具体建造者,用户使用不同的具体建造者即可得到不同的产品对象

缺点

①需要了解所有产品类的组成,才能独立改变其中一部分

②产品的组成部分必须相对稳定,如果太多的改变会导致需要修改很多的建造者类

③不能很好的支持对于“part-of”的建造,比如在建造一个轮胎时,很难确定它是否需要装到车上

④如果产品类是最终产品类,那么每次改变都需要修改代码,这样不符合“开闭原则”

5、应用场景

建造者模式常见的应用场景是构建复杂对象,其中有很多组成部分需要组装,组装顺序可能有所不同。

创建的对象有多个部分组成,并且每个部分的类型和数量都可能不同。

创建对象的过程必须独立于对象的组成部分以及它们的装配方式。

在构建过程中会使用到一些重复的组件,构建过程允许创建不同的表示。

一些具体的例子:

电脑组装,创建电脑对象

建筑建造,创建房子对象

电子产品,创建手机对象

汽车制造,创建汽车对象等。

通过建造者模式可以使得创建复杂对象的过程变得简单化。因为它分离了具体的部件和装配方式,并且在构建过程中可以重用一些部件。

下面对一个典型的例子:计算机组装 进行解释说明

6、代码实现

例如,我们需要构建一台计算机,计算机包含CPU、内存、主板、硬盘等组成部分,每种组成部分又有多种不同的型号可供选择。我们可以使用建造者模式来构建这台计算机。

首先我们定义一个计算机类 Computer,它是产品类,包含 CPU、内存、主板、硬盘等组成部分。

1. public class Computer {
2. private String CPU;
3. private String Memory;
4. private String Mainboard;
5. private String HDD;
6. // getter and setter
7. }

然后我们定义一个抽象建造者类 ComputerBuilder,它规范了建造计算机的各个部分的构建:

1. public abstract class ComputerBuilder {
2. protected Computer computer;
3. public void createNewComputer(){
4.         computer = new Computer();
5.     }
6. public abstract void buildCPU();
7. public abstract void buildMemory();
8. public abstract void buildMainboard();
9. public abstract void buildHDD();
10. public Computer getComputer(){
11. return computer;
12.     }
13. }

然后我们可以创建不同的具体建造者类实现抽象建造者类中定义的抽象方法:

1. public class HighEndComputerBuilder extends ComputerBuilder {
2. public void buildCPU() {
3.         computer.setCPU("i9-9900K");
4.     }
5. }

然后我们定义指挥者类ComputerEngineer,它负责控制建造过程:

1. public class ComputerEngineer {
2. private ComputerBuilder computerBuilder;
3. public void setComputerBuilder(ComputerBuilder computerBuilder) {
4. this.computerBuilder = computerBuilder;
5.     }
6. public Computer getComputer() {
7. return computerBuilder.getComputer();
8.     }
9. public void constructComputer() {
10.         computerBuilder.createNewComputer();
11.         computerBuilder.buildCPU();
12.         computerBuilder.buildMemory();
13.         computerBuilder.buildMainboard();
14.         computerBuilder.buildHDD();
15.     }
16. }

最后客户端调用指挥者类的constructComputer()方法就可以创建自己需要的计算机了,如

1. ComputerEngineer engineer = new ComputerEngineer();
2. engineer.setComputerBuilder(new HighEndComputerBuilder());
3. engineer.constructComputer();
4. Computer computer = engineer.getComputer();

建造者模式将产品的构建过程和最终产品进行了解耦,使得构建过程可以独立变化,而不影响使用产品的客户端.

相关文章
|
9月前
|
设计模式 Java 数据库连接
【设计模式】【创建型模式】工厂方法模式(Factory Methods)
一、入门 什么是工厂方法模式? 工厂方法模式(Factory Method Pattern)是一种创建型设计模式,它定义了一个用于创建对象的接口,但由子类决定实例化哪个类。工厂方法模式使类的实例化延迟
285 16
|
9月前
|
设计模式 缓存 安全
【设计模式】【创建型模式】单例模式(Singleton)
一、入门 什么是单例模式? 单例模式是一种设计模式,确保一个类只有一个实例,并提供一个全局访问点。它常用于需要全局唯一对象的场景,如配置管理、连接池等。 为什么要单例模式? 节省资源 场景:某些对象创
347 15
|
9月前
|
设计模式 JavaScript Java
【设计模式】【创建型模式】原型模式(Prototype)
一、入门 什么是原型模式? 原型模式(Prototype Pattern)是一种创建型设计模式,它通过复制现有对象来创建新对象,而不是通过实例化类。 原型模式的核心是克隆(Clone),即通过复制现有
264 15
|
9月前
|
设计模式 Java Apache
【设计模式】【创建型模式】建造者模式(Builder)
一、入门 什么是建造者模式? 建造者模式(Builder Pattern)是一种创建型设计模式,用于逐步构建复杂对象。 它通过将对象的构建过程与表示分离,使得相同的构建过程可以创建不同的表示。 为什么
488 14
|
9月前
|
设计模式 Java 关系型数据库
【设计模式】【创建型模式】抽象工厂模式(Abstract Factory)
一、入门 什么是抽象工厂模式? 抽象工厂模式是一种创建型设计模式,它提供了一个接口,用于创建相关或依赖对象的家族,而不需要指定具体的类。 简单来说,抽象工厂模式是工厂方法模式的升级版,它能够创建一组相
325 14
|
11月前
|
设计模式 XML Java
设计模式觉醒系列(03)创建型模式的5个设计模式 | 一口气讲全讲透
本文详细介绍了设计模式中的创建型模式,包括建造者模式、原型模式、单例模式、工厂方法模式和抽象工厂模式。创建型模式关注对象的创建过程,隐藏了创建细节,以提高代码的可维护性和可扩展性。通过具体的实战demo和应用场景分析,展示了每种模式的特点和优势。例如,建造者模式适用于复杂对象的分步骤构建;原型模式通过复制对象实现高效复用;单例模式确保全局唯一实例;工厂方法模式和抽象工厂模式则提供了灵活的对象创建机制,支持多类型产品族的生产。这些模式在实际开发中能够简化客户端代码,提升系统灵活性和复用性。
|
设计模式 架构师 Java
设计模式之 5 大创建型模式,万字长文深剖 ,近 30 张图解!
设计模式是写出优秀程序的保障,是让面向对象保持结构良好的秘诀,与架构能力与阅读源码的能力息息相关,本文深剖设计模式之 5 大创建型模式。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
设计模式之 5 大创建型模式,万字长文深剖 ,近 30 张图解!
|
设计模式 存储 安全
【23种设计模式·全精解析 | 创建型模式篇】5种创建型模式的结构概述、实现、优缺点、扩展、使用场景、源码解析
创建型模式的主要关注点是“怎样创建对象?”,它的主要特点是"将对象的创建与使用分离”。这样可以降低系统的耦合度,使用者不需要关注对象的创建细节。创建型模式分为5种:单例模式、工厂方法模式抽象工厂式、原型模式、建造者模式。
1070 2
【23种设计模式·全精解析 | 创建型模式篇】5种创建型模式的结构概述、实现、优缺点、扩展、使用场景、源码解析
|
设计模式 存储 安全
【23种设计模式·全精解析 | 创建型模式篇】5种创建型模式的结构概述、实现、优缺点、扩展、使用场景、源码解析
结构型模式描述如何将类或对象按某种布局组成更大的结构。它分为类结构型模式和对象结构型模式,前者采用继承机制来组织接口和类,后者釆用组合或聚合来组合对象。由于组合关系或聚合关系比继承关系耦合度低,满足“合成复用原则”,所以对象结构型模式比类结构型模式具有更大的灵活性。 结构型模式分为以下 7 种: • 代理模式 • 适配器模式 • 装饰者模式 • 桥接模式 • 外观模式 • 组合模式 • 享元模式
【23种设计模式·全精解析 | 创建型模式篇】5种创建型模式的结构概述、实现、优缺点、扩展、使用场景、源码解析
|
设计模式 存储 负载均衡
【五】设计模式~~~创建型模式~~~单例模式(Java)
文章详细介绍了单例模式(Singleton Pattern),这是一种确保一个类只有一个实例,并提供全局访问点的设计模式。文中通过Windows任务管理器的例子阐述了单例模式的动机,解释了如何通过私有构造函数、静态私有成员变量和公有静态方法实现单例模式。接着,通过负载均衡器的案例展示了单例模式的应用,并讨论了单例模式的优点、缺点以及适用场景。最后,文章还探讨了饿汉式和懒汉式单例的实现方式及其比较。
【五】设计模式~~~创建型模式~~~单例模式(Java)