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

创建型模式之 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.xdnf.cn/news/9578.html

相关文章:

  • 从跟跑到领跑:雷克赛恩17年创业历程
  • 正则表达式的修饰符
  • 如何更新和清理 Go 依赖版本
  • 暗通道先验去雾算法实现
  • Trae配置JAVA本地环境,开发前后端
  • ToolsSet之:大数及高精度运算
  • Web 端顶级视效实现:山海鲸端渲染底层原理与发布模式详解
  • 234. Palindrome Linked List
  • Linux系统编程-DAY07
  • JAVA中常用算法详解:排序(冒泡、快速排序)与查找(二分查找)
  • 途景VR智拍APP:开启沉浸式VR拍摄体验
  • 快速入门Java+Spring Ai+deepseek 开发
  • git 一台电脑一个git账户,对应多个仓库ssh
  • ParakeetTDT0.6BV2,语音识别ASR,极速转录, 高精度英文转录,标点支持(附整合包)
  • Dify案例实战之智能体应用构建(二)
  • IBM DB2和MYSQL在安全性、稳定性等方面的差异
  • 时间序列预测算法中的预测概率化笔记
  • GPIO驱动实例代码
  • 【客户案例】借助 DHTMLX Gantt 和 Diagram 构建高效项目与流程管理平台
  • 基于SpringBoot开发一个MCP Server
  • vue 中的ref属性
  • chown修改不成功的解决方案
  • ESP8285乐鑫SOCwifi芯片32bit MCU和2.4 GHz Wi-Fi
  • 零衍课堂 | 环境初始化部署流程
  • 从0到1:多医院陪诊小程序开发笔记(上)
  • VMware 安装 Ubuntu 实战教程
  • python学习打卡day38
  • 截图后怎么快速粘贴到notability?
  • day22-定时任务故障案例
  • 秒杀系统—2.第一版初步实现的技术文档