当前位置: 首页 > 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();}
}

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

相关文章:

  • Ubuntu22.04安装Go语言的几种方式
  • Typora笔记上传到CSDN
  • Modbus转BACnet/IP网关BA100-配硬件说明
  • DjangoRF实战-2-apps-users
  • java面试题,有synchronized锁,threadlocal、数据可以设置默认值、把redis中的json转为对象
  • Apache Spark:深度解析
  • 使用umi作为模板如何实现权限管理
  • 系统架构设计师教程 第4章 信息安全技术基础知识-4.1 信息安全基础知识-解读
  • 【Rust光年纪】探索Rust游戏开发世界:六款引人注目的游戏引擎与框架
  • 从数据时代到智能时代,星环科技信雅达联合发布金融全栈解决方案
  • 自定义维度映射:Kylin Cube设计的高级玩法
  • c17 新特性 字面量,变量,函数,隐藏转换等
  • git操作的一些备忘录
  • vscode回退不显示了,不方便操作
  • 常见的CSS属性(一)——字体、文本、边框、内边距、外边距、背景、行高、圆角、透明度、颜色值
  • react入门到实战-day2-7.21
  • Springboot集成Elasticsearch High Level REST Client实现增删改查实战
  • 2023河南萌新联赛第(二)场 南阳理工学院
  • 使用Docker Compose给自己上传的JAR打包成镜像并自动启动容器
  • NET8部署Kestrel服务HTTPS深入解读TLS协议之Certificate证书
  • DML数据库的数据类型
  • @RequestParam和@PathVariable 处理 HTTP 请求参数的注解
  • 《代码大全》读书笔记-第Ⅰ部分 奠定基础
  • 杰发科技Bootloader(1)—— Keil配置地址
  • 338. 比特位计数
  • flask后端+vue前端——后端怎么发文件给前端?
  • 计算机毕业设计django+hadoop+scrapy租房可视化 租房推荐系统 租房大屏可视化 租房爬虫 spark 58同城租房爬虫 房源推荐系统
  • 【Tomcat】Mac M3 Pro安装Tomcat7
  • Spring Boot(八十二):SpringBoot通过rsa实现API加密
  • 巴黎奥运启幕 PLM系统助力中国制造闪耀全球