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

创建型模式之 Builder (生成器)

创建型模式之 Builder (生成器)

摘要:
本文介绍了生成器(Builder)设计模式,属于创建型模式之一。该模式通过将复杂对象的构建与表示分离,使同一构建过程能创建不同表现形式。文章以小米汽车不同配置版本为例说明了模式意图,并提供了Java代码实现示例,展示了如何通过Director管理Builder来构建不同的Product。核心包括抽象Builder类、具体Builder实现类以及最终产品类,实现了通过相同构建过程生成不同配置产品的目标。

前言:

23种设计模式,分为创建型、结构型、行为型
创建型模式:1.简单工厂【不属于23种设计模式 次写法为了引入工厂方法和抽象工厂】 -> 2.工厂方法【属于类】-> 3.抽象工厂 -> 4.生成器 -> 5.原型 -> 6.单例

生成器设计模式:用自己话理解,使用同样的构造器可以创建不同表示结果,比如买小米汽车,su7 有基础版 前驱、加强版 后驱 、max版 实时四驱,同样是汽车,选择配置不同。

意图

将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
在这里插入图片描述

代码

import java.util.ArrayList;
import java.util.List;/*** Builder 生成器模式*/
public class BuilderDemo {public static void main(String[] args) {// 1.创建管理员Director director1 = new Director();// 2.管理员构建不同的构造器Builder1 builder1 = new Builder1();director1.construct(builder1);Product product1 = builder1.getResult();// 3.展示product1.show();System.out.println("----------------------------");Director director2 = new Director();Builder2 builder2 = new Builder2();director2.construct(builder2);Product product2 = builder2.getResult();product2.show();}
}/*** 管理者*/
class Director{public void construct(Builder builder){builder.buildPart();}
}abstract class Builder{/*** 构建组件*/public abstract void buildPart();/*** 获取组件* @return 组件*/public abstract Product getResult();
}/***构建组件2*/
class Builder2 extends Builder{Product product  = new Product();@Overridepublic void buildPart() {product.add("a");product.add("b");}@Overridepublic Product getResult() {return product;}
}/*** 构建组件1*/
class Builder1 extends Builder{Product product  = new Product();@Overridepublic void buildPart() {product.add("a");product.add("b");product.add("c");product.add("d");product.add("e");}@Overridepublic Product getResult() {return product;}
}class Product{List<String> parts = new ArrayList<>();/*** 添加产品组件* @param part 组件*/public void add(String part){parts.add(part);}/*** 展示组件*/public void show(){parts.forEach(System.out::println);}
}

在这里插入图片描述

喜欢我的文章记得点个在看,或者点赞,持续更新中ing…

http://www.lryc.cn/news/2392369.html

相关文章:

  • 智能物资出入库管控系统
  • 鸿蒙OSUniApp 制作倒计时与提醒功能#三方框架 #Uniapp
  • 深入剖析网络协议:七层协议与四层协议详解
  • 机器学习-线性回归基础
  • 自学嵌入式 day 25 - 系统编程 标准io 缓冲区 文件io
  • [Vue组件]半环进度显示器
  • 科技赋能建筑行业,智能楼宇自控系统崭露头角成发展新势力
  • Rust入门之并发编程基础(一)
  • 高级特性实战:死信队列、延迟队列与优先级队列(二)
  • VR 电缆故障测试系统:技术革新​
  • Rocky Linux上安装Go
  • 深度学习论文: FastVLM: Efficient Vision Encoding for Vision Language Models
  • 白杨SEO:做AI搜索优化的DeepSeek、豆包、Kimi、百度文心一言、腾讯元宝、通义、智谱、天工等AI生成内容信息采集主要来自哪?占比是多少?
  • 显示docker桌面,vnc远程连接docker
  • Web 端顶级视效实现:山海鲸端渲染底层原理与发布模式详解
  • 腾讯云国际站性能调优
  • 深入解析操作系统内核与用户空间以及内核态与用户态转换
  • 每日一题洛谷P8662 [蓝桥杯 2018 省 AB] 全球变暖c++
  • 【JVM】初识JVM 从字节码文件到类的生命周期
  • 多级体验体系构建:基于开源AI智能客服与AI智能名片的S2B2C商城小程序体验升级路径研究
  • 每日算法 -【Swift 算法】字符串转整数算法题详解:myAtoi 实现与正则表达式对比
  • 记录一个难崩的bug
  • Git切换历史版本及Gitee云绑定
  • 智能外呼系统中 NLP 意图理解的工作原理与技术实现
  • 服务器的IP是什么东西?
  • [问题解决]:Unable to find image ‘containrrr/watchtower:latest‘ locally
  • 【文件上传】阿里云对象存储服务实现文件上传
  • IPv6代理如何引领下一代网络未来
  • Linux——数据链路层
  • ubuntu 22.04 安装下载