当前位置: 首页 > news >正文

建造者模式(Builder Pattern)工作原理

文章目录

    • @[toc]
    • 建造者模式(Builder Pattern)工作原理
      • 一、基本概念
      • 二、主要角色
      • 三、工作流程
        • (一)定义产品
        • (二)定义抽象建造者
        • (三)定义具体建造者
        • (四)定义指挥者
        • (五)使用建造者模式

建造者模式(Builder Pattern)工作原理

一、基本概念

建造者模式是一种创建对象的设计模式,将复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的产品对象。

二、主要角色

  1. 产品(Product):要创建的复杂对象。
  2. 抽象建造者(Builder):定义了创建产品各个部件的抽象方法。
  3. 具体建造者(Concrete Builder):实现了抽象建造者的抽象方法,负责构建产品的各个部件,并负责组装产品。
  4. 指挥者(Director):负责按照一定的顺序调用建造者的方法来构建产品。

三、工作流程

(一)定义产品

首先,定义产品类,描述产品的组成和功能。

class Product {private String part1;private String part2;// 省略构造函数、getter 和 setter 方法
}
(二)定义抽象建造者

创建抽象建造者类,声明构建产品各个部件的抽象方法。

abstract class Builder {abstract void buildPart1();abstract void buildPart2();abstract Product getProduct();
}
(三)定义具体建造者

实现抽象建造者类,具体实现构建产品各个部件的方法,并负责组装产品。

class ConcreteBuilder extends Builder {private Product product = new Product();@Overridevoid buildPart1() {product.setPart1("Part 1 of Concrete Product");}@Overridevoid buildPart2() {product.setPart2("Part 2 of Concrete Product");}@OverrideProduct getProduct() {return product;}
}
(四)定义指挥者

创建指挥者类,用于控制产品的构建过程。

class Director {Builder builder;Director(Builder builder) {this.builder = builder;}void construct() {builder.buildPart1();builder.buildPart2();}
}
(五)使用建造者模式

在客户端代码中,创建具体建造者对象和指挥者对象,通过指挥者控制构建过程,获取最终的产品对象。

public class Client {public static void main(String[] args) {Builder builder = new ConcreteBuilder();Director director = new Director(builder);director.construct();Product product = builder.getProduct();}
}

相关文章:

建造者模式(Builder Pattern)工作原理

文章目录 [toc]建造者模式(Builder Pattern)工作原理一、基本概念二、主要角色三、工作流程(一)定义产品(二)定义抽象建造者(三)定义具体建造者(四)定义指挥者…...

Ubuntu22.04安装Go语言的几种方式

在 Ubuntu 22.04 上安装 Go 语言可以通过几种不同的方法,以下是两种常见的安装方法: 方法1:使用 go 官方安装脚本 打开终端。 下载 Go 语言的安装脚本: curl -O https://go.dev/dl/go1.22.5.linux-amd64.tar.gz请检查 Go 官方网…...

Typora笔记上传到CSDN

1.Typora 安装 Typora链接:百度网盘 提取码:b6d1 旧版本是不需要破解的 后来的版本比如1.5.9把放在typora的根目录下就可以了 2.上传到CSDN 步骤 csdn 写文章-使用MD编辑器-导入本地md文件即可 问题 图片没法显示 原因 图片的链接是本地的 当然没法…...

Modbus转BACnet/IP网关BA100-配硬件说明

在现代自动化系统中,不同设备和系统之间的通信至关重要,Modbus和BACnet/IP协议虽然各有优势,但它们之间的直接通信存在障碍。钡铼Modbus转BACnet/IP网关作为连接这两种协议的桥梁,允许不同系统之间的无缝数据交换。 一、Modbus转…...

DjangoRF实战-2-apps-users

1、用户模块 创建一个用户模块子应用,用来管理用户,和认证和授权。 1.1根目录创建apps, 为了使用方便,还需要再pycharm中设置一下资源路径,就可以自动提示 1.2注册子应用 1.3添加应用根目录到环境变量path python导…...

java面试题,有synchronized锁,threadlocal、数据可以设置默认值、把redis中的json转为对象

有面试题,有synchronized锁,threadlocal 一、面试题小记二、加锁synchronized1. 先看代码2. synchronized 讲解2.1. 同步代码块2.2. 同步方法2.3. 锁的选择和影响2.4. 注意事项2.5 锁的操作,手动释放锁,显式地获取锁(属…...

Apache Spark:深度解析

文章目录 引言Apache Spark 官网链接Spark 的原理1. 核心组件2. 弹性分布式数据集(RDD)3. 执行模型 基础使用1. 环境搭建2. 示例代码 高级功能1. DataFrame 和 Dataset2. 机器学习3. 流处理 优缺点优点缺点 结论 引言 Apache Spark 是一个快速、通用、可…...

使用umi作为模板如何实现权限管理

三种权限管理的方法: 在做后台管理系统时,难免会使用到权限管理,权限管理方式有三种,分别是:路由、守卫、后端配合。 路由:通过动态路由,根据登录人员不同注册不同的路由,直接让没…...

系统架构设计师教程 第4章 信息安全技术基础知识-4.1 信息安全基础知识-解读

系统架构设计师教程 第4章 信息安全技术基础知识-4.1 信息安全基础知识 4.1.1 信息安全的概念4.1.1.1 信息安全的范围4.1.1.1.1 设备安全4.1.1.1.2 数据安全4.1.1.1.3 内容安全4.1.1.1.4 行为安全 4.1.2 信息存储安全4.1.2.1 信息使用的安全4.1.2.1.1 用户的标识与验证4.1.2.1.…...

【Rust光年纪】探索Rust游戏开发世界:六款引人注目的游戏引擎与框架

探索Rust游戏开发引擎:选择合适的工具 前言 随着Rust语言的不断发展,越来越多的游戏开发者开始将其视作构建游戏引擎和框架的理想选择。本文将介绍几个用于Rust语言的游戏引擎和框架,分别对其核心功能、使用场景、安装与配置以及API进行概览…...

从数据时代到智能时代,星环科技信雅达联合发布金融全栈解决方案

近年来,星环科技与信雅达在金融行业的多个关键领域展开了广泛而深入的合作,推出了一系列面向金融科技领域的联合解决方案。此次合作基于星环科技在大数据、人工智能和云计算领域的先进技术,以及信雅达在金融领域的深厚积累,围绕数…...

自定义维度映射:Kylin Cube设计的高级玩法

自定义维度映射:Kylin Cube设计的高级玩法 在数据仓库领域,Apache Kylin以其高性能的分析能力而闻名。Kylin通过构建多维数据立方体(Cube)来实现对大数据集的快速查询。Cube设计中的维度映射是优化查询性能的关键环节。本文将探讨…...

c17 新特性 字面量,变量,函数,隐藏转换等

导论 c17新特性引入了许多新的语法,这些语法特性更加清晰,不像传统语法,语义飘忽不定,比如‘a’你根本不知道是宽字符还是UTF-8 字符。以及测试i i,最后结果到底是多少。这种问题很大情况是根据编译器的优化进行猜测&a…...

git操作的一些备忘录

1.回退本地合并 git merge --abort 2.撤销上一次的提交 方法一:(已经提交到git线上仓库了,git reset操作,会把之前提交的都删除,感觉有点危险) 想要让Git回退历史,有以下步骤: 使用git log命令&#xff0c…...

vscode回退不显示了,不方便操作

一、后退前进按钮 顶部显示&#xff0c;方便调试 <—— ——> 文件-> 首选项 -> 设置->commandcenter->勾选 Window: Title Bar Style->custom 将native —>custom...

常见的CSS属性(一)——字体、文本、边框、内边距、外边距、背景、行高、圆角、透明度、颜色值

一、字体 二、文本 三、边框 四、外边距 五、内边距 六、背景 七、行高 八、圆角 九、透明度 九、颜色值 元素的继承性是指给父元素设置了某些属性&#xff0c;子元素或后代元素也会有作用。 一、字体 “font-*”是字体相关的属性&#xff0c;具有继承性。代码如下&a…...

react入门到实战-day2-7.21

昨天晚上刚学完已经一点了&#xff0c;来不及写笔记&#xff0c;主要是想睡觉哈&#xff0c;所以今天补上&#xff0c;我发现效率还挺高的&#xff0c;今天重新做笔记&#xff0c;加固了昨天的知识点&#xff0c;要不以后都这样子哈&#xff0c;学完第二天再写哈&#xff0c;要…...

Springboot集成Elasticsearch High Level REST Client实现增删改查实战

获取源码&#x1f6a9; 需要完整代码资料&#xff0c;请一键三连后评论区留下邮箱&#xff0c;安排发送&#xff01;&#xff01;&#xff01;&#x1f916; 什么是High Level REST Client&#xff1f; Elasticsearch 的 High Level REST Client 是一个用于与 Elasticsearch…...

2023河南萌新联赛第(二)场 南阳理工学院

A. 国际旅行Ⅰ 题目&#xff1a; 思路&#xff1a; 因为题意上每个国家可以相互到达&#xff0c;所以只需要排序&#xff0c;输出第k小的值就可以了。 AC代码&#xff1a; #include<bits/stdc.h> #define int long long #define IOS ios::sync_with_stdio(0);cin.tie…...

使用Docker Compose给自己上传的JAR打包成镜像并自动启动容器

Docker Compose是一个用于定义和运行多容器Docker应用程序的工具。通过编写一个docker-compose.yml文件&#xff0c;可以简化Docker容器的管理。本文将介绍如何使用Docker Compose将一个上传的JAR文件打包成Docker镜像&#xff0c;并在容器中自动启动该应用程序。 一、准备工作…...

声音与视觉环境优化:提升工程师与知识工作者生产力的科学方法

1. 项目概述&#xff1a;声音与视觉如何重塑我们的生产力你有没有过这样的体验&#xff1a;在图书馆的绝对安静里&#xff0c;反而一个字也写不出来&#xff1b;但在咖啡馆那恰到好处的嘈杂声中&#xff0c;思绪却如泉涌&#xff1f;或者&#xff0c;当你戴上耳机&#xff0c;播…...

Equalizer APO终极指南:如何免费打造专业级音频系统

Equalizer APO终极指南&#xff1a;如何免费打造专业级音频系统 【免费下载链接】equalizerapo Equalizer APO mirror 项目地址: https://gitcode.com/gh_mirrors/eq/equalizerapo 你是否曾想过&#xff0c;只需一款免费软件就能让普通音响系统释放出专业级的音质表现&a…...

微信小程序逆向工程终极指南:wxappUnpacker深度解析与实用技巧

微信小程序逆向工程终极指南&#xff1a;wxappUnpacker深度解析与实用技巧 【免费下载链接】wxappUnpacker forked from https://github.com/qwerty472123/wxappUnpacker 项目地址: https://gitcode.com/gh_mirrors/wxappu/wxappUnpacker 微信小程序逆向工程是开发者深入…...

别再熬夜改答辩 PPT 了!okbiye AI PPT,4 步搞定学术演示稿(附保姆级操作指南)

okbiye-免费查重复率aigc检测/开题报告/毕业论文/智能排版/文献综述/AI PPTAI PPT制作 - Okbiye智能写作https://www.okbiye.com/ppt 作为一名被毕业答辩 PPT 折磨过两次的过来人&#xff0c;我太懂那种痛苦了&#xff1a;对着几万字的论文&#xff0c;不知道怎么浓缩成十几页 …...

模块三-数据清洗与预处理——15. 异常值检测与处理

15. 异常值检测与处理 1. 概述 异常值&#xff08;Outlier&#xff09;是指与其他观测值显著不同的数据点。它们可能来自测量错误、数据录入错误&#xff0c;也可能是真实的极端情况&#xff08;如高收入人群&#xff09;。正确识别和处理异常值对数据分析至关重要。 import pa…...

【RK3588开发】SPI回环

SPI回环 &#xff08;1&#xff09;内核SPI子系统使能 修改内核配置需要先加载默认配置&#xff0c;然后图形界面修改后需保存配置在以下目录下勾选图中的选项&#xff1a; **>**Device Drivers —> ​ ->[*] SPI support —>至少勾选以下选项&#xff1a; Rockchi…...

JESD204B协议在5G MIMO基站中的关键应用与优化

1. JESD204B协议在MIMO基站中的核心价值 现代无线通信系统正经历着从传统单天线向大规模MIMO&#xff08;多输入多输出&#xff09;架构的转型。作为5G基站的核心技术&#xff0c;Massive MIMO系统通常需要处理64T64R甚至更大规模的天线阵列&#xff0c;这对数据转换器&#xf…...

ARM内存访问指令LDRB与LDREX详解及应用

1. ARM内存访问指令概述在嵌入式系统开发中&#xff0c;对内存的高效访问是保证程序性能的关键。ARM架构提供了丰富的内存访问指令集&#xff0c;其中LDRB和LDREX是两种具有代表性的指令。LDRB&#xff08;Load Register Byte&#xff09;用于从内存加载字节数据&#xff0c;而…...

书匠策AI:论文写作小白也能一键“搞定“毕业论文?深度拆解这个AI神器到底有多香!

微信公众号搜一搜&#xff1a;书匠策AI &#xff5c; 官网直达&#xff1a;www.shujiangce.com 各位同学、各位在论文苦海里挣扎的"秃头星人"们&#xff0c;今天咱们来聊一个让我最近疯狂安利的东西——书匠策AI。 别急着划走&#xff0c;这不是广告&#xff0c;这…...

C-Eval中文基准测试到底准不准?3轮人工校验+5类对抗样本验证,真相令人震惊

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;C-Eval中文基准测试到底准不准&#xff1f;3轮人工校验5类对抗样本验证&#xff0c;真相令人震惊 C-Eval 作为当前主流的中文大模型评测基准&#xff0c;长期被用于学术论文与工业选型&#xff0c;但其…...