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

【建造者模式】

建造者模式 Builder Pattern

  • 属于创建型模式
  • 是将一个复杂对象的构建与它的标识分离,使得同样的构建过程可以创建不同的表示
  • 关键点:用户只需要指定需要建造的类型就可以获得对象,建造过程及细节不需要了解

实现 demo

需要构建的对象

@Data
public class Course {private String name;private String ppt;private String video;private String note;private String homework;
} 

构造者

public class CourseBuilder {private Course course = new Course();public CourseBuilder name(String name) {course.setName(name);return this;}public CourseBuilder ppt(String ppt) {course.setPpt(ppt);return this;}public CourseBuilder video(String video) {course.setVideo(video);return this;}public CourseBuilder note(String note) {course.setNote(note);return this;}public CourseBuilder homework(String homework) {course.setHomework(homework);return this;}static CourseBuilder builder(){return new CourseBuilder();}public Course build() {return course;}}

测试及结果

public class Test {public static void main(String[] args) {Course course = CourseBuilder.builder().name("name").ppt("ppt").video("video").note("note").homework("homework").build();System.out.println(course);}
}

在这里插入图片描述

在源码中的应用

  • StringBuilder

  • Mybatis-Plus

  • Spring

https://www.bilibili.com/video/BV1nZ4y1i7tn?p=11

总结

优点

  • 封装性好,创建与使用分离
  • 扩展性好,建造类之间独立,一定程度上解耦

建造者和工厂模式的区别

  1. 工厂模式只需要把对象创建出来,而建造者模式需要注意创建需要哪些部件组成
  2. 建造者模式根据建造过程的不一样,最终的对象部件组成也不一样
http://www.lryc.cn/news/433206.html

相关文章:

  • 自动化表格处理的革命:智能文档系统技术解析
  • 【Hot100】LeetCode—394. 字符串解码
  • 12. 如何在MyBatis中进行分页查询?常见的分页实现方式有哪些?
  • @[TOC](力扣题目-滑动窗口-qsort排序-二分法查找)
  • Docker容器相关命令
  • 【老课推荐】基于LangChain和知识图谱的大模型医疗问答机器人项目
  • Adobe Sensei——自动化视频编辑、特效应用和素材增强,通过AI技术快速优化视频内容,自动修复视频质量、自动添加背景音乐或字幕
  • 【AIGC数字人】EchoMimic:基于可编辑关键点条件的类人音频驱动肖像动画
  • 变量数据类型 Day3
  • SpringBoot2:请求处理原理分析-RESTFUL风格接口
  • [Linux][配置]Linux修改history存储的最大记录数
  • 代码随想录 刷题记录-28 图论 (5)最短路径
  • 大数据-124 - Flink State 01篇 状态原理和原理剖析:状态类型 执行分析
  • C++复习day04
  • [苍穹外卖]-04菜品管理接口开发
  • gitlab 启动/关闭/启用开机启动/禁用开机启动
  • 中间件解析漏洞(附环境搭建教程)
  • matlab实现kaiser窗+时域采样序列(不管原信号拉伸成什么样子)是一样的,变到频谱后再采样就是一样的频域序列。
  • git为不同的项目设置不同的提交作者
  • 防爆定位信标与防爆定位基站有什么区别?
  • QT 编译报错:C3861: ‘tr‘ identifier not found
  • 谈谈ES搜索引擎
  • 【MySQL】MySQL基础
  • Spring中Bean的相关注解
  • Golang | Leetcode Golang题解之第385题迷你语法分析器
  • 【Java 优选算法】双指针(上)
  • 【自动驾驶】控制算法(八)横向控制Ⅰ | 算法与流程
  • Android SSE 单向接收数据
  • 排序《数据结构》
  • flutter 提示框2 Dialog