创建者模式-Builder
创建者模式使用多个简单的对象一步一步构建成一个复杂的对象。它提供了一种创建对象的最佳方式。一个 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返回类
*/
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());
}
}
在上面这个例子中,创建者和指导者合二为一。
创建者模式-Builder的更多相关文章
- [设计模式] 3 创建者模式 builder
转载http://blog.csdn.net/wuzhekai1985/article/details/6667467 建造者模式的定义将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不 ...
- 创建者模式Builder
创建者模式: 分离对象子组件的单独构造(由Builder来负责)和装配(由Director负责),对象的构造比较复杂时使用 该模式. 类图: Builder 抽象建造者接口,规范各个组成部分的构建. ...
- 设计模式学习总结(五)创建者模式(Builder)
创建者模式,主要针对某些产品有类似的生产步骤,且有需要有先后顺序的进行各个部件的生成. 一.示例展示: 通过学习及总结,以下是我完成的创建者模式的示例: 1.创建产品类:Laptop public c ...
- 【设计模式】—— 创建者模式Builder
前言:[模式总览]——————————by xingoo 模式意图 一个对象的创建十分复杂,为了区分构建过程和使用过程,因此分开.使用一个Director类进行对象的创建,Builder规定了这个创建 ...
- (Builder)创建者模式
定义: 建造模式:将一个复杂对象的构建与他的表示相分离,使得同样的构建过程可以创建不同的表示. 适用性: 当流程算法可以固定几个步骤,步骤的算法步骤执行顺序固定,且制造的产品可以唯一确定,这时使用创建 ...
- Builder创建者模式
http://www.codeproject.com/Articles/42415/Builder-Design-Pattern In Elizabeth's day care center, the ...
- 创建类模式(三):创建者(Builder)
定义 将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示.这使得构件算法和组装方式可以独立应对变化:复用同样的构建算法可以创建不同的表示,不同的构建过程可以复用相同的部件组装方式 ...
- C#设计模式之五创建者模式(Builder)【创建型】
一.引言 今天我们要讲讲Builder模式,也就是建造者模式,当然也有叫生成器模式的.在现实生活中,我们经常会遇到一些构成比较复杂的物品,比如:电脑,它就是一个复杂的物品,它主要是由CPU.主板.硬 ...
- OOAD(面向对象分析和设计)GRASP之创建者模式(Creator)又称生成器模式学习笔记
说OOAD是一门玄学,一点都不为过.又或许是因为我之前一直没有很好的建立面向对象的思想,更有可能是因为练得不够多...总之,一直没能很好理解,哪怕把一本叫做<UML和模式应用>的书翻来覆去 ...
随机推荐
- HTTP: 状态码200~505说明
HTTP状态码(HTTP Status Code) 一些常见的状态码为: 200 - 服务器成功返回网页 404 - 请求的网页不存在 503 - 服务不可用 所有状态解释: 1xx(临时响应) 表示 ...
- Python格式输出汇总
print ('%10s'%('test')) print ('{:<10}'.format('test'))#left-aligned print ('{:>10}'.format('t ...
- Web核心之Request对象
HTTP协议中Request请求部分格式 //请求行(这种是POST类型的请求) POST /HttpServleLogin.html HTTP/1.1 //请求头(User-Agent里有Firef ...
- 查看mysql数据库文件存放位置
show variables like '%basedir%' 也是可以的,这是查找mysql的安装路径
- XSS漏洞基础
什么是XSS? XSS全程Cross-site scripting,跨站脚本攻击.恶意攻击者往Web页面里插入html代码,当用户浏览该页之时,嵌入其中Web里面的html代码会被执行,从而达到恶意用 ...
- php chop()函数 语法
php chop()函数 语法 chop()函数是什么意思? php chop函数是rtrim函数的别名,作用与rtrim函数是相同的,删除字符串右边的空格或其他预定义字符,语法是chop(strin ...
- 【LeetCode 42】接雨水
题目链接 [题解] 考虑每个位置它最后能接多少单位的水. 显然就是这个min(位置左边最高的位置,位置右边最高的位置)-当前这个位置的高度. 这就是这个位置最后水上涨的高度. 两个边界注意是不会储水的 ...
- 10.14.1-linux设置时间等
设置时间[root@wen /]# date -s "20171014 15:42:00"2017年 10月 14日 星期六 15:42:00 CST 格式化时间[root@wen ...
- 黄金含量版本——KTV
呀,进来的都是盆友,首先先给大家拜年了,祝大家新年快乐,万事如意,家和万事兴~! 大家看了标题进来就不能让大家白进来,一定会让大家带着满满的果实. 下面我们就来讨论讨论KTV这个项目: (1)KTV的 ...
- Android setXfermode 模式
参考:http://onewayonelife.iteye.com/blog/1169176 setXfermode 设置两张图片相交时的模式 我们知道 在正常的情况下,在已有的图像上绘图将会在 ...