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

一、类图

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

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

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

public class BuilderClient {

    public static void main(String[] args) {
// 具体创建者
Builder builder = new ConcreteBuilder();
// 指导者
Director director = new Director(builder);
// 指导者创建产品
Product product = director.construct();
}
} /**
* 产品角色
*/
class Product { } /**
* 抽象建造者
*/
interface Builder {
/**
* 产品零件1部分的建造方法
*/
void buildPart1(); /**
* 产品零件2部分的建造方法
*/
void buildPart2(); /**
* 返回完整产品
*/
Product getProduct(); } /**
* 具体的创建者
*/
class ConcreteBuilder implements Builder { private Product product = new Product(); @Override
public void buildPart1() {
System.out.println("创建了part1");
} @Override
public void buildPart2() {
System.out.println("创建了part2");
} @Override
public Product getProduct() {
return product;
} } /**
* 指导角色
*/
class Director { private Builder builder; Director(Builder builder) {
this.builder = builder;
} Product construct() {
// 负责构建各个零件
builder.buildPart1();
builder.buildPart2();
// 获取产品
return builder.getProduct();
} }
 

二、示例

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

创建返回对象的创建者

public class RestAPIResponseBuilder {

    /**
* 成功返回,带数据
*/
public static <T> RestAPIResponse buildSuccessResponse(T data) {
RestAPIResponse response = new RestAPIResponse();
response.setCode("200");
response.setMessage("success");
response.setData(data);
return response;
} /**
* 失败返回,不带数据
*/
public static RestAPIResponse buildFailureResponse(String message) {
RestAPIResponse response = new RestAPIResponse();
response.setCode("404");
response.setMessage(message);
response.setData(null);
return response;
} }

客户端

public class Client {

    public static void main(String[] args) {
/*********************没有加返回接收******************/
//返回成功
RestAPIResponse response = RestAPIResponseBuilder.buildSuccessResponse("数据");
System.out.println(response.getCode() + "|" + response.getMessage() + "|" + response.getData()); //返回失败
RestAPIResponse response2 = RestAPIResponseBuilder.buildFailureResponse("错误信息");
System.out.println(response2.getCode() + "|" + response2.getMessage() + "|" + response2.getData());
} }

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

 ……更多设计模式的内容,可以访问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. HTTP: 状态码200~505说明

    HTTP状态码(HTTP Status Code) 一些常见的状态码为: 200 - 服务器成功返回网页 404 - 请求的网页不存在 503 - 服务不可用 所有状态解释: 1xx(临时响应) 表示 ...

  2. Python格式输出汇总

    print ('%10s'%('test')) print ('{:<10}'.format('test'))#left-aligned print ('{:>10}'.format('t ...

  3. Web核心之Request对象

    HTTP协议中Request请求部分格式 //请求行(这种是POST类型的请求) POST /HttpServleLogin.html HTTP/1.1 //请求头(User-Agent里有Firef ...

  4. 查看mysql数据库文件存放位置

    show variables like '%basedir%' 也是可以的,这是查找mysql的安装路径

  5. XSS漏洞基础

    什么是XSS? XSS全程Cross-site scripting,跨站脚本攻击.恶意攻击者往Web页面里插入html代码,当用户浏览该页之时,嵌入其中Web里面的html代码会被执行,从而达到恶意用 ...

  6. php chop()函数 语法

    php chop()函数 语法 chop()函数是什么意思? php chop函数是rtrim函数的别名,作用与rtrim函数是相同的,删除字符串右边的空格或其他预定义字符,语法是chop(strin ...

  7. 【LeetCode 42】接雨水

    题目链接 [题解] 考虑每个位置它最后能接多少单位的水. 显然就是这个min(位置左边最高的位置,位置右边最高的位置)-当前这个位置的高度. 这就是这个位置最后水上涨的高度. 两个边界注意是不会储水的 ...

  8. 10.14.1-linux设置时间等

    设置时间[root@wen /]# date -s "20171014 15:42:00"2017年 10月 14日 星期六 15:42:00 CST 格式化时间[root@wen ...

  9. 黄金含量版本——KTV

    呀,进来的都是盆友,首先先给大家拜年了,祝大家新年快乐,万事如意,家和万事兴~! 大家看了标题进来就不能让大家白进来,一定会让大家带着满满的果实. 下面我们就来讨论讨论KTV这个项目: (1)KTV的 ...

  10. Android setXfermode 模式

    参考:http://onewayonelife.iteye.com/blog/1169176  setXfermode  设置两张图片相交时的模式  我们知道 在正常的情况下,在已有的图像上绘图将会在 ...