创建者模式使用多个简单的对象一步一步构建成一个复杂的对象。它提供了一种创建对象的最佳方式。一个 Builder 类会一步一步构造最终的对象,该 Builder 类是独立于其他对象的。

一、类图

创建者模式包括以下几种角色:

  • Builder:为创建一个Product对象的各个部件指定抽象接口。
  • ConcreteBuilder:实现Builder的接口以构造和装配该产品的各个部件。定义并明确它所创建的表示。提供一个获取产品的接口。
  • Director:构造一个使用Builder接口的对象。
  • Product:表示被构造的复杂对象。ConcreteBuilder创建该产品的内部表示并定义它的装配过程 。包含定义组成部件的类,包括将这些部件装配成最终产品的接口。

将上面的类图用代码表示如下

  1. public class BuilderClient {
  2.  
  3. public static void main(String[] args) {
  4. // 具体创建者
  5. Builder builder = new ConcreteBuilder();
  6. // 指导者
  7. Director director = new Director(builder);
  8. // 指导者创建产品
  9. Product product = director.construct();
  10. }
  11. }
  12.  
  13. /**
  14. * 产品角色
  15. */
  16. class Product {
  17.  
  18. }
  19.  
  20. /**
  21. * 抽象建造者
  22. */
  23. interface Builder {
  24. /**
  25. * 产品零件1部分的建造方法
  26. */
  27. void buildPart1();
  28.  
  29. /**
  30. * 产品零件2部分的建造方法
  31. */
  32. void buildPart2();
  33.  
  34. /**
  35. * 返回完整产品
  36. */
  37. Product getProduct();
  38.  
  39. }
  40.  
  41. /**
  42. * 具体的创建者
  43. */
  44. class ConcreteBuilder implements Builder {
  45.  
  46. private Product product = new Product();
  47.  
  48. @Override
  49. public void buildPart1() {
  50. System.out.println("创建了part1");
  51. }
  52.  
  53. @Override
  54. public void buildPart2() {
  55. System.out.println("创建了part2");
  56. }
  57.  
  58. @Override
  59. public Product getProduct() {
  60. return product;
  61. }
  62.  
  63. }
  64.  
  65. /**
  66. * 指导角色
  67. */
  68. class Director {
  69.  
  70. private Builder builder;
  71.  
  72. Director(Builder builder) {
  73. this.builder = builder;
  74. }
  75.  
  76. Product construct() {
  77. // 负责构建各个零件
  78. builder.buildPart1();
  79. builder.buildPart2();
  80. // 获取产品
  81. return builder.getProduct();
  82. }
  83.  
  84. }
 

二、示例

在当前前后端分离已经成为主流开发模式的情况下,Rest API是经常使用到的。在向前段提供Rest接口时,可以对返回结果进行封装,这里就可以用到创建者模式
 
返回对象
  1. /**
  2. * REST API返回类
  3. */
  4. public class RestAPIResponse<T> {
  5.  
  6. // 返回码
  7. private String code;
  8. // 返回状态,成功或失败
  9. private String message;
  10. // 数据
  11. private T data;
  12.  
  13. // getter/setter
  14.  
  15. }

创建返回对象的创建者

  1. public class RestAPIResponseBuilder {
  2.  
  3. /**
  4. * 成功返回,带数据
  5. */
  6. public static <T> RestAPIResponse buildSuccessResponse(T data) {
  7. RestAPIResponse response = new RestAPIResponse();
  8. response.setCode("200");
  9. response.setMessage("success");
  10. response.setData(data);
  11. return response;
  12. }
  13.  
  14. /**
  15. * 失败返回,不带数据
  16. */
  17. public static RestAPIResponse buildFailureResponse(String message) {
  18. RestAPIResponse response = new RestAPIResponse();
  19. response.setCode("404");
  20. response.setMessage(message);
  21. response.setData(null);
  22. return response;
  23. }
  24.  
  25. }

客户端

  1. public class Client {
  2.  
  3. public static void main(String[] args) {
  4. /*********************没有加返回接收******************/
  5. //返回成功
  6. RestAPIResponse response = RestAPIResponseBuilder.buildSuccessResponse("数据");
  7. System.out.println(response.getCode() + "|" + response.getMessage() + "|" + response.getData());
  8.  
  9. //返回失败
  10. RestAPIResponse response2 = RestAPIResponseBuilder.buildFailureResponse("错误信息");
  11. System.out.println(response2.getCode() + "|" + response2.getMessage() + "|" + response2.getData());
  12. }
  13.  
  14. }

在上面这个例子中,创建者和指导者合二为一。

 ……更多设计模式的内容,可以访问Refactoring.Guru

创建者模式-Builder的更多相关文章

  1. [设计模式] 3 创建者模式 builder

    转载http://blog.csdn.net/wuzhekai1985/article/details/6667467 建造者模式的定义将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不 ...

  2. 创建者模式Builder

    创建者模式: 分离对象子组件的单独构造(由Builder来负责)和装配(由Director负责),对象的构造比较复杂时使用 该模式. 类图: Builder 抽象建造者接口,规范各个组成部分的构建. ...

  3. 设计模式学习总结(五)创建者模式(Builder)

    创建者模式,主要针对某些产品有类似的生产步骤,且有需要有先后顺序的进行各个部件的生成. 一.示例展示: 通过学习及总结,以下是我完成的创建者模式的示例: 1.创建产品类:Laptop public c ...

  4. 【设计模式】—— 创建者模式Builder

    前言:[模式总览]——————————by xingoo 模式意图 一个对象的创建十分复杂,为了区分构建过程和使用过程,因此分开.使用一个Director类进行对象的创建,Builder规定了这个创建 ...

  5. (Builder)创建者模式

    定义: 建造模式:将一个复杂对象的构建与他的表示相分离,使得同样的构建过程可以创建不同的表示. 适用性: 当流程算法可以固定几个步骤,步骤的算法步骤执行顺序固定,且制造的产品可以唯一确定,这时使用创建 ...

  6. Builder创建者模式

    http://www.codeproject.com/Articles/42415/Builder-Design-Pattern In Elizabeth's day care center, the ...

  7. 创建类模式(三):创建者(Builder)

    定义 将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示.这使得构件算法和组装方式可以独立应对变化:复用同样的构建算法可以创建不同的表示,不同的构建过程可以复用相同的部件组装方式 ...

  8. C#设计模式之五创建者模式(Builder)【创建型】

    一.引言  今天我们要讲讲Builder模式,也就是建造者模式,当然也有叫生成器模式的.在现实生活中,我们经常会遇到一些构成比较复杂的物品,比如:电脑,它就是一个复杂的物品,它主要是由CPU.主板.硬 ...

  9. OOAD(面向对象分析和设计)GRASP之创建者模式(Creator)又称生成器模式学习笔记

    说OOAD是一门玄学,一点都不为过.又或许是因为我之前一直没有很好的建立面向对象的思想,更有可能是因为练得不够多...总之,一直没能很好理解,哪怕把一本叫做<UML和模式应用>的书翻来覆去 ...

随机推荐

  1. CentOS7.2安装Oracle12.1.0.2

    Centos7.2环境安装(安装桌面) #安装界面 #查看版本 cat /etc/redhat-release #查看连接 ifconfig eth0 echo "127.0.0.1 tes ...

  2. Cytoscape软件简介

    • Cytoscape一款开源的网络显示和分析软件. 软件的核心部分提供了 网络显示.布局.查询等方面的基本功能. • Cytoscape源自系统生物学,通过Cytoscape,用户可以在可视化的 环 ...

  3. moment.js时间格式化库

    网址:momentjs.cn 主要用来操作时间的格式化.通过发送API请求获取到的数据中:例如[新闻]中的 发布时间,有的时候.请求到的时间,后台没处理过,那么只能前端来操作数据了. moment.j ...

  4. php 系统函数

    realpath();//测试和文档解释不同,可以判断文件是否存在,存在返回路径否则返回false rtrim("Hello World",’d‘);//可以删除指定字符串

  5. boost timer

    Boost.Timer provides clocks to measure code performance. At first, it may seem like this library com ...

  6. 组合的输出(回溯、dfs)

    问题 O: [回溯法]组合的输出 题目描述 排列与组合是常用的数学方法,其中组合就是从n个元素中抽出r个元素(不分顺序且r<=n),我们可以简单地将n个元素理解为自然数1,2,…,n,从中任取r ...

  7. iOS设计模式之工厂模式

    一,什么是工厂模式 模式定义: “专门定义一个类来负责创建其他类的实例,被创建的实例通常具有共同的父类.” 世界上就是由一个工厂类,根据传入的参数,动态地决定创建出哪一个产品类的实例. 需求场景: 简 ...

  8. git merge 上线操作流程

    switch to branch git merge 主干到分支解决冲突,解决冲突文件,冲突文件,add to index 检查文件无<<<<<<< .=== ...

  9. [LightOJ1070]Algebraic Problem

    题目:Algebraic Problem 链接:https://vjudge.net/problem/LightOJ-1070 分析: 1)$ a^n+b^n = ( a^{n-1}+b^{n-1} ...

  10. [CSP-S模拟测试]:x(数学+并查集)

    题目背景 $\frac{1}{4}$遇到了一道水题,叒完全不会做,于是去请教小$D$.小$D$都没看就切掉了这题,嘲讽了$\frac{1}{4}$一番就离开了.于是,$\frac{1}{4}$只好来问 ...