简谈设计模式之建造者模式

建造者模式是一种创建型设计模式, 旨在将复杂对象的构建过程与其表示分离, 使同样的构建过程可以构建不同的表示. 建造者模式主要用于以下情况:

  1. 需要创建的对象非常复杂: 这个对象由多个部分组成, 且这些部分需要一步步地构建
  2. 不同的表示: 通过相同的构建过程可以生成不同的表示
  3. 构建过程的控制: 希望能够有更多的控制, 逐步创建对象, 而不是在一个步骤中完成

建造者模式结构

  1. 抽象建造者: 定义了创建产品的各部件的抽象接口
  2. 具体建造者: 实现了建造者接口, 构建并装配各个部件, 最终生成具体的产品
  3. 产品: 具体要创建的复杂对象
  4. 指挥者: 负责安排已有模块的顺序构建一个复杂的对象

建造者模式实现

// 产品类
public class Product {private String partA;private String partB;private String partC;public void setPartA(String partA) {this.partA = partA;}public void setPartB(String partB) {this.partB = partB;}public void setPartC(String partC) {this.partC = partC;}@Overridepublic String toString() {return "Product [partA=" + partA + ", partB=" + partB + ",partC=" + partC + "]";}
}// 抽象建造者
public abstract class Builder {protected Product product = new Product();public abstract void buildPartA();public abstract void buildPartB();public abstract void buildPartC();public Product getResult() {return product;}
}// 具体建造者
public class ConcreteBuilder extends Builder {@Overridepublic void buildPartA() {product.setPartA("Part A");}@Overridepublic void buildPartB() {product.setPartA("Part B");}@Overridepublic void buildPartC() {product.setPartA("Part C");}
}// 指挥者
public class Director {private Builder builder;public Director(Builder builder) {this.builder = builder}public void construct() {builder.buildPartA();builder.buildPartB();builder.buildPartC();}
}

优点:

  • 易于拓展: 通过创建新的具体建造者, 可以很容易地增加新的产品表示
  • 细粒度控制: 可以一步步地构建对象, 细化对象的创建流程
  • 封装性: 将复杂对象的创建封装在建造者中, 客户端无需了解细节

缺点:

  • 更多的代码量: 为了实现建造者模式, 需要更多的类和接口, 增加了代码量
  • 复杂性: 对于简单的对象创建, 建造者模式过于复杂了

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/44503.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

skywalking-1-服务端安装

skywalking很优秀。 安装服务端 skywalking的服务端主要是aop服务,为了方便查看使用还需要安装ui。另外采集的数据我们肯定要存起来,这个数据库就直接用官方的banyandb。也就是aop、ui、banyandb都使用官方包。 我们的目的是快速使用和体验&#xff0c…

Xshell配置ssh免密码登录(密钥登陆)

文章目录 一、Xshell登陆步骤 一、Xshell登陆步骤 1.生成客户端的公钥私钥 2.生成公钥文件 3.生成私钥文件 4.将公钥传输进要登录的服务器中 5.修改公钥文件名为authorized_keys (authorized_keys是用于存储公钥的特殊文件,如果已经有了这份文件,可以在末尾追加) 6.连…

时序预测 | Matlab实现TCN-Transformer的时间序列预测

时序预测 | Matlab实现TCN-Transformer的时间序列预测 目录 时序预测 | Matlab实现TCN-Transformer的时间序列预测效果一览基本介绍程序设计 效果一览 基本介绍 基于TCN-Transformer模型的时间序列预测,可以用于做光伏发电功率预测,风速预测,…

apt curl wget git 命令行临时设置代理

一、linux 代理全局设置 export http_proxyhttp://192.168.6.9:8080/ export https_proxyhttps://192.168.6.9:8080/ 可以 export https_proxyhttp://192.168.6.9:8080/ 也可以缺点,有些工具不生效,每次要取消代理设置也麻烦 二、linux 命令行临时设置…

Qt框架中信号与槽机制的实现原理及在QGC中的具体应用场景

Qt 框架的信号与槽机制是其最强大和独特的功能之一。它使得对象之间的通信变得非常简单和直观,尤其在处理用户界面事件和其他异步操作时。以下是 Qt 信号与槽机制的实现原理及其在 QGroundControl (QGC) 中的具体应用场景。 信号与槽机制的实现原理 信号与槽的基本…

小白学webgl合集-Three.js加载器

THREE.TextureLoader: 用途: 加载单个图像文件并将其作为纹理应用到材质上。示例: const loader new THREE.DataTextureLoader(); loader.load(path/to/data.bin, function (texture) {const material new THREE.MeshBasicMaterial({ map: texture });const geometry new TH…

使用Spring Boot和Couchbase实现NoSQL数据库

使用Spring Boot和Couchbase实现NoSQL数据库 大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿! 一、引言 NoSQL数据库越来越受到开发者的欢迎,特别是…

引用计数器(kref)

1、什么是引用计数器 如果我们写了一个字符驱动,当硬件设备插上时,系统会生成一个设备节点。用户在应用空间操作这个设备节点就可以操作设备。如果此时将硬件断开,驱动是不是就要立刻释放呢?如果立刻释放,应用程序是不…

docker-compose构建、运行多容器简介

(1)准备依赖的镜像,包括mariadb、jdk1.8、nginx,配置docker-compose.yml文件 services:mariadb:image: mariadbports:- "3314:3306"environment:- MARIADB_ROOT_PASSWORD123456volumes:- ./mysql:/var/lib/mysqlnetwor…

PLC数采网关在实际应用中有哪些效能?天拓四方

在工业自动化领域中,PLC扮演着至关重要的角色,它负责控制和监测生产线的各个环节。然而,随着工业4.0的推进和智能制造的快速发展,单纯依靠PLC进行现场控制已无法满足企业对数据集中管理、远程监控和智能分析的需求。因此&#xff…

Efficient Estimation of Word Representations in Vector Space论文笔记解读

基本信息 作者TomasMikolovdoi10.48550发表时间2013期刊ICLR网址http://arxiv.org/abs/1301.3781 研究背景 1. What’s known 既往研究已证实 前馈神经网络语言模型(NNLM) 循环神经网络语言模型(RNNLM) 2. What’s new 创新点 Word2vec有两种模型:CBOW和Skip-gr…

AJAX-个人版2.0

AJAX(Asynchronous Javascript And Xml) 传统请求及缺点 传统的请求都有哪些? 直接在浏览器地址栏上输入URL。点击超链接提交form表单使用JS代码发送请求 window.open(url)document.location.href urlwindow.location.href url… 传统请…

【对抗算法复现】CW

首先进行数据的预处理 transform transforms.Compose([transforms.ToTensor(), # 将图片转换为Tensor,自动将[0,255]映射到[0,1]transforms.Normalize((0.491,0.482 ,0.446), (0.247 ,0.243 ,0.261)) # 对张量进行标准化,使其范围为[-1,1] ])CW实现 …

“十四五”新型基础设施建设

一、基础设施 基础设施包括交通设施、邮电通讯设施、能源动力设施、供水排水设施、环保设施、防卫防灾安全设施等传统基础设施。这些设施共同构成了一个国家或地区正常运转的支柱,确保社会经济活动的正常进行。 交通设施:交通设施是基础设施的重要组成部…

AbyssFish单连通周期边界多孔结构2D软件

软件介绍 AbyssFish单连通周期边界多孔结构2D软件(以下简称软件)可用于生成具备周期性边界条件的单连通域多孔结构PNG图片,软件可设置生成模型的尺寸、孔隙率、孔隙尺寸、孔喉尺寸等参数,并且具备孔隙形态控制功能。 软件生成的…

视频号热门视频数据分析工具,快速查看同行数据创作者必看!

每天排行榜是帮助创作者查看同行数据为自己提供创作灵感,此外每天排行榜热门的视频收集了用户喜欢看的类型。 灵感分类了解当前社会关注的热点内容。该工具通过监测和分析视频号全网舆情,选取热门话题进行排序,形成一个每日热点排行榜。 这…

yolov8 分类太阳能板

原文:yolov8 分类太阳能板 - 知乎 (zhihu.com) 1、数据集 https://github.com/zae-bayern/elpv-dataset​github.com/zae-bayern/elpv-dataset 2、数据分析 import matplotlib.pyplot as plt import ostrain_dir = "./images" valid_extensions=(.jpg, .png, .j…

华为防火墙上的配置(1)

实验拓扑图 实验要求: 1、DMZ区内的服务器,生产区仅能在办公时间内(9:00-18:00)可以访问,办公区的设备全天可以访问 2、生产区不允许访问互联网,办公区和游客区允许访问互联网 3、办公区设备10.0.2.10不…

00:HAL库的认识

一:HAL库 开发现状: 1:下载 网站: https://www.st.com/zh/embedded-software/stm32cube-mcu-mpu-packages.html 去选择我们的系列 我们使用的是STM32F103C8t6的这个 继续一直向下拉点击这个;之后傻瓜步骤直接可以…

最新2023年行政区划、路网、土壤质地矢量数据

行政区划矢量数据是指用矢量格式表示的地理信息系统(GIS)数据,其中包含了行政区域的边界信息,如国家、省份、城市、区县、乡镇甚至村级的界限。这些数据通常以点、线、面的几何图形来表示具体的地理实体,并且每个实体都…