简介

建造者模式(Builder Pattern),也叫生成器模式,属于创建型模式。它使用多个简单的对象一步一步构建成一个复杂的对象。它允许你使用相同的创建代码生成不同类型和形式的对象。

当你希望使用代码创建不同形式的产品 (例如各种商品和订单) 时, 一些基本部件不会变,而其组合经常变化的时候,就可以考虑建造者模式。

作用

  1. 当需要创建复杂对象的时候,由各个部分的子对象来逐步构建,以适应复杂多变的情况。

  1. 具体的建造者类之间是相互独立的,这有利于系统的扩展。

  1. 将变与不变分离开。主管类隐藏了产品构造细节, 客户端只需要将一个生成器与主管类关联,就能从生成器处构造对象。

实现步骤

  1. 定义主管类,可以制造所有形式的产品。

  1. 在基本生成器接口中声明创建产品的步骤。

  1. 为每个形式的产品创建具体生成器类,并实现其构造步骤。

  1. 客户端同时创建生成器和主管类,所有产品都遵循相同的接口,构造结果通过主管类获取。

UML

代码

创建建造者接口

// Builder.java 建造者接口,定义基本建造方法
public interface Builder {public void reset();public void setName(String name);public void setScreen(Integer[] screen);public void setGPU(Integer no);
}

具体建造者类,可以多个

// ManualBuilder.java 使用手册建造者类也实现了建造者接口
public class ManualBuilder implements Builder {private Manual manual;public void reset() {this.manual = new Manual();}public void setName(String name) {this.manual.setName(name);}public void setScreen(Integer[] screen) {this.manual.setScreen(screen);}public void setGPU(Integer no) {this.manual.setGpuType(no);}public Manual getProduct() {return this.manual;}
}// PhoneBuilder.java 手机建造者实现了建造者接口
public class PhoneBuilder implements Builder {private Phone phone;public void reset() {this.phone = new Phone();}public void setName(String name) {this.phone.setName(name);}public void setScreen(Integer[] screen) {this.phone.setScreen(screen);}public void setGPU(Integer no) {this.phone.setGpuType(no);}public Phone getProduct() {return this.phone;}
}

定义具体产品类,不同建造者建造不同产品

// Manual.java 手册产品类
public class Manual {private String name = "PhoneManualName";private Integer[] screen = { 0, 0 };private Integer gpuType = 0;private Integer pages = 0;public void setName(String name) {this.name = name;}public String getName() {return this.name;}public void setScreen(Integer[] screen) {this.screen = screen;}public Integer[] getScreen() {return this.screen;}......}// Phone.java 手机产品类
public class Phone {private String name = "PhoneName";private Integer[] screen = { 0, 0 };private Integer gpuType = 0;public void setName(String name) {this.name = name;}public String getName() {return this.name;}public void setScreen(Integer[] screen) {this.screen = screen;}public Integer[] getScreen() {return this.screen;}......}

指挥调度类

// Director.java 指挥调度类,负责利用建造者建造产品,隔离需求与功能
public class Director {// 建造phone1public void buildIPhone(Builder builder) {builder.reset();Integer[] screen = { 120, 500 };builder.setName("iPhone");builder.setScreen(screen);builder.setGPU(100);}// 建造phone2public void buildHuaweiPhone(Builder builder) {builder.reset();Integer[] screen = { 130, 600 };builder.setName("HuaweiPhone");builder.setScreen(screen);builder.setGPU(102);}// 建造phone3public void buildMiPhone(Builder builder) {builder.reset();Integer[] screen = { 120, 650 };builder.setName("MiPhone");builder.setScreen(screen);builder.setGPU(103);}}

测试调用

    /*** 建造者模式是使用多个简单的对象一步一步构建出一个复杂的对象来。* 分为主管类和建造这类,主管类负责具体指挥调度,建造负责具体实施。* 主管类通过一步一步调用各种建造者实现复杂对象。*/// 声明指挥者Director director = new Director();// 创建手机PhoneBuilder phoneBuilder = new PhoneBuilder();director.buildMiPhone(phoneBuilder);Phone miPhone = phoneBuilder.getProduct();System.out.println("miPhone:" + miPhone.getName() + " | " + miPhone.getGpuType().toString());// 创建手册ManualBuilder manualBuilder = new ManualBuilder();director.buildMiPhone(manualBuilder);Manual manual = manualBuilder.getProduct();System.out.println("manual:" + manual.getName() + " | " + manual.getGpuType().toString());

更多语言版本

不同语言实现设计模式:https://github.com/microwind/design-pattern

【建造者设计模式详解】Java/JS/Go/Python/TS不同语言实现相关推荐

  1. java 配置文件的路径_详解java配置文件的路径问题

    详解java配置文件的路径问题 详解java配置文件的路径问题 各种语言都有自己所支持的配置文件,配置文件中有很多变量是经常改变的.不将程序中的各种变量写死,这样能更方便地脱离程序本身去修改相关变量设 ...

  2. java 配置文件配置路径_详解java配置文件的路径问题

    详解java配置文件的路径问题 各种语言都有自己所支持的配置文件,配置文件中有很多变量是经常改变的.不将程序中的各种变量写死,这样能更方便地脱离程序本身去修改相关变量设置. 那么我们需要读取配置文件, ...

  3. 常见的java设计模式详解

    常见的java设计模式详解 1. 根据目的来分 2 GoF的23种设计模式的功能 3.下面介绍几种常见的模式 单例(Singleton)模式 前言 1)单例(Singleton)模式的定义 2)特点 ...

  4. python java混合编程_详解java调用python的几种用法(看这篇就够了)

    java调用python的几种用法如下: 在java类中直接执行python语句 在java类中直接调用本地python脚本 使用Runtime.getRuntime()执行python脚本文件(推荐 ...

  5. 《设计模式详解》创建型模式 - 建造者模式

    建造者模式 4.4 建造者模式 4.4.1 概述 4.4.2 结构 4.4.3 实例 4.4.4 优缺点 4.4.5 使用场景 4.4.6 扩展 - 构建对象 重构前 重构后 4.5 创建型模式对比 ...

  6. java多线程设计模式详解[推荐]

    java多线程设计模式详解[推荐] java多线程设计模式详解之一 线程的创建和启动 java语言已经内置了多线程支持,所有实现Runnable接口的类都可被启动一个新线程,新线程会执行该实例的run ...

  7. 设计模式(五)——建造者模式详解

    设计模式(五)--建造者模式详解 概述 结构 代码案例 优缺点 使用场景 模式扩展 创建者模式对比 工厂方法模式和建造者模式 抽象工厂模式和建造者模式 概述 建造者模式就是说将一个复杂对象的构建和表示 ...

  8. Javascript常用的设计模式详解

    Javascript常用的设计模式详解 阅读目录 一:理解工厂模式 二:理解单体模式 三:理解模块模式 四:理解代理模式 五:理解职责链模式 六:命令模式的理解: 七:模板方法模式 八:理解javas ...

  9. 《设计模式详解》笔记目录

    <设计模式详解> 前言 后记 目录 设计模式概述.UML 软件设计原则 创建型模式 单例模式 工厂模式 原型模式 建造者模式 结构型模式 代理模式 适配器模式 装饰者模式 桥接模式 外观模 ...

最新文章

  1. 超融合架构的优缺点_超融合服务器与传统架构服务器的区别哪?定制服务器厂家简要分析...
  2. Ceph mon节点故障处理案例分解
  3. CentOS7 搭建GIT环境
  4. Python--切片学习记录
  5. numa节点_极致性能(1):以NUMA为起点
  6. 题库明细 使用java理解程序逻辑
  7. 腾讯TI-ONE平台从cos导入数据到jupyterLab失败
  8. 【Vue2.0】— 消息订阅与发布pubsub(二十)
  9. 西南科技大学OJ题 数字转换成字符0613
  10. 转换世界地图到球纹理图
  11. oracle中数据泵只导出索引,oracle expdp/impdp exclude=STATISTICS
  12. Ubuntu安装Caffe过程和BUG以及解决方案(全网最全)
  13. ORA-01950: 对表空间 USERS无权限
  14. linux账号与权限管理
  15. 服务器快速搭建AList集成网盘网站【宝塔面板一键部署AList/Docker】
  16. r语言中大小写c的区别吗,R语言和C语言哪个难?
  17. IDEA中HTML文档快速制作table表格快捷键方法
  18. Python | 动态规划解决“返回第n个丑数”
  19. iOS OC 计算代码执行耗时
  20. php网页采集 修正版

热门文章

  1. 什么是软件开发工具包(SDK)
  2. Python实现ACO蚁群优化算法优化卷积神经网络回归模型(CNN回归算法)项目实战
  3. 前端开发中关于网络的那些事儿--基础篇
  4. mysql密码修改失败问题解决
  5. 通俗理解 Adam 优化器
  6. parse_url用法和一些参数说明
  7. Streat 思锥 光锥之内就是命运,思锥之外则是无垠
  8. 算法自我分析——汉诺塔算法
  9. PHP调整图片饱和度,php使用Imagick获取图片主色调
  10. loadrunner快捷键