创建型模式之Builder(建造者)模式
建造者模式(Builder Pattern):将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
建造者模式是一步一步创建一个复杂的对象,它允许用户只通过指定复杂对象的类型和内容就可以构建它们,用户不需要知道内部的具体构建细节。建造者模式属于对象创建型模式。根据中文翻译的不同,建造者模式又可以称为生成器模式。
二、模式结构成员构成
1)建造者模式包含的角色:
• Builder:抽象建造者
• ConcreteBuilder:具体建造者
• Director:指挥者
• Product:产品角色

2)时序图

/**
* Represents the product created by the builder.
* 代表由builder创建的产品类
*/
public class Car {
private int wheels;
private String color; public Car() {
} public String getColor() {
return color;
} public void setColor(final String color) {
this.color = color;
} public int getWheels() {
return wheels;
} public void setWheels(final int wheels) {
this.wheels = wheels;
} @Override
public String toString() {
return "Car [wheels = " + wheels + ", color = " + color + "]";
}
} /**
* The builder abstraction.
* 抽象builder类
*/
public interface CarBuilder {
Car build(); CarBuilder setColor(final String color); CarBuilder setWheels(final int wheels);
} /**
* 具体Builder实现类
*/
public class CarBuilderImpl implements CarBuilder {
private Car car; public CarBuilderImpl() {
car = new Car();
} @Override
public Car build() {
return car;
} @Override
public CarBuilder setColor(final String color) {
car.setColor(color);
return this;
} @Override
public CarBuilder setWheels(final int wheels) {
car.setWheels(wheels);
return this;
}
} /**
* Director 指挥者类
*/
public class CarBuildDirector {
private CarBuilder builder; public CarBuildDirector(final CarBuilder builder) {
this.builder = builder;
} public Car construct() {
return builder.setWheels(4)
.setColor("Red")
.build();
} public static void main(final String[] arguments) {
final CarBuilder builder = new CarBuilderImpl(); final CarBuildDirector carBuildDirector = new CarBuildDirector(builder); System.out.println(carBuildDirector.construct());
}
}
>建造者模式所创建的产品一般具有较多的共同点,其组成部分相似,如果产品之间的差异性很大,则不适合使用建造者模式,因此其使用范围受到一定的限制。
>如果产品的内部变化复杂,可能会导致需要定义很多具体建造者类来实现这种变化,导致系统变得很庞大。
>需要生成的产品对象有复杂的内部结构,这些产品对象通常包含多个成员属性。
>需要生成的产品对象的属性相互依赖,需要指定其生成顺序。
>对象的创建过程独立于创建该对象的类。在建造者模式中引入了指挥者类,将创建过程封装在指挥者类中,而不在建造者类中。
>隔离复杂对象的创建和使用,并使得相同的创建过程可以创建不同的产品。
创建型模式之Builder(建造者)模式的更多相关文章
- Builder 建造者模式
简介 建造者模式的概念:将一个复杂的对象的构建与它的表示分离,使得同样的构建过程可以有不同的表示. 大概的意思,就是一套的构建过程可以有不同的产品(表示)出来.这些产品(表示)都按照这一套的构建过程被 ...
- Java设计模式(四)Builder建造者模式
一.场景描述 建造者模式同工厂模式.抽象工厂模式一样,用于创建继承类对象. 工厂模式:http://www.cnblogs.com/mahongbiao/p/8618970.html 抽象工厂模式:h ...
- Builder 建造者模式 MD
Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...
- Android设计模式——Builder(建造者)模式
1.建造者模式是一步一步创建一个复杂对象的创建模式.该模式是为了将构建复杂对象的过程和他的部件解耦,使得构建过程和部件表示隔离开. 2.Bulider模式的定义是:将一个复杂对象的构建与它的表示分离, ...
- 一天一个设计模式——Builder建造者模式
一.模式说明 在现实世界中,当我们要构造一个大型工程时(建一个大楼),通常的做法是先建造工程的每个独立部分,然后再逐步构造完成(先打地基,再搭框架,最后逐层累造).在程序设计领域,构造一个复杂的类时( ...
- 设计模式C++学习笔记之十(Builder建造者模式)
建造者模式,将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示.一段晦涩难懂的文字,实现创建不同表示的方法就是给创建的过程传入创建的参数.详细的还是看代码吧. 10.1.解释 ...
- C++设计模式-Builder建造者模式
作用:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示. Builder模式和AbstractFactory模式在功能上很相似,因为都是用来创建大的复杂的对象,它们的区别是:B ...
- 8、Builder 建造者模式 组装复杂的实例 创造型模式
1.什么是Builder模式 定义: 将一个复杂对象的构建与表示相分离,使得同样的构建过程可以创建不同的表示.大白话就是,你不需要知道这个类的内部是什么样的,只用把想使用的参数传进去就可以了,达到了解 ...
- 《JAVA与模式》之建造者模式
1.概念 将一个复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表示. [构建与表示分离,同构建不同表示] 与抽象工厂的区别:在建造者模式里,有个指导者,由指导者来管理建造者,用户是与指导者 ...
随机推荐
- linux远程方式,以及基础命令
最近准备学习linux系统,购买了阿里巴巴的云服务器,系统为CentOS. 一.连接实例 1.使用管理终端. 这是阿里巴巴云服务器管理控制台,需要登录阿里巴巴,找到自己实例后,点击右侧远程连接即刻. ...
- 新建一个Windows Service的方法
http://www.cnblogs.com/YanPSun/archive/2010/05/22/1741381.html http://blog.csdn.net/m15188153014/art ...
- vba编程基础2
安装office2010的时候, 最好是 完全安装/完整安装 , 这样可以查阅 excel的 "帮助文档" 帮助文档中包含了更多的/更详细的 参考信息. 普通模块无事件, 只有 子 ...
- Oracle联合多个子查询(inner join)
select aaa.*,bbb.xh from (select xn,xq,kcdm,kcmc,xf,xkkh,kcxz from jxrwbview where xn='2017-2018' gr ...
- 题解——Codeforces Round #507 (based on Olympiad of Metropolises) T1 (模拟)
暴力模拟即可 就是情况略多 #include <cstdio> #include <algorithm> #include <cstring> using name ...
- 几个C++ online test 网站
http://www.mycppquiz.com/list.php http://www.codelect.net/TestDetails/Cplusplus-Senior-Level-Test ht ...
- 单域名下多子域名同时认证HTTPS
参考: http://blog.csdn.net/wzj0808/article/details/53401101 http://www.cnblogs.com/silin6/p/5931640.ht ...
- 【BZOJ】1832: [AHOI2008]聚会
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1832 省选出出了CF的感觉..... 显然一发贪心,如果两个点显然就是他们的$LCA$(不 ...
- Mysql 查看定时器 打开定时器 设置定时器时间
1.查看是否开启evevt与开启evevt. 1.1.MySQL evevt功能默认是关闭的,可以使用下面的语句来看evevt的状态,如果是OFF或者0,表示是关闭的. show VARIABLES ...
- 四: 使用vue搭建网站前端页面
---恢复内容开始--- 在搭建路由项目的时候的基本步骤 一:创建项目 安装好vue 搭好环境 (步骤在上篇博客中) 进入项目目录 cd 目录路径/ 目录名 创建项目 ...