1. 说明

(1)英文名叫Builder,建造者模式,也叫生成器模式。

(2)属于创建型模式。

2. 定义

要想实现同样的构建过程有不同的表现,自然的思路就是把构建过程独立出来,在生成器模式中把它称为指导者,由它来知道装配过程,但是不负责具体的构建。当然只有指导者也是不够的,得有具体的对象生成器。这样指导者就是可以重用的构建过程,而生成器是可以被切换的具体实现。举个简单的例子,如汽车,有很多部件,车轮,方向盘,发动机还有各种小零件等等,部件很多,但远不止这些,如何将这些部件装配成一部汽车,这个装配过程也很复杂(需要很好的组装技术), builder模式就是为了将部件和组装分开。

3. 结构

分4个角色,抽象建造者角色(Builder)、具体建造者角色(ConcreteBuilder)、导演者角色(Director)、产品角色(Product),主要说导演者角色,导演者角色是与客户端打交道的角色。导演者将客户端创建产品的请求划分为对各个零件的建造请求,再将这些请求委派给具体建造者角色。具体建造者角色是做具体建造工作的,但是却不为客户端所知。

4. 代码

Product.java

Builder.java

ConcreteBuilder.java

Director.java

Client.java

public class Product {private String part1;private String part2;public String getPart1() {return part1;}public void setPart1(String part1) {this.part1 = part1;}public String getPart2() {return part2;}public void setPart2(String part2) {this.part2 = part2;}
}
public interface Builder {public void buildPart1();public void buildPart2();public Product retrieveProduct();
}
public class ConcreteBuilder implements Builder {private Product product = new Product();public void buildPart1() {product.setPart1("构建第1个部件");}public void buildPart2() {product.setPart2("构建第2个部件");}public Product retrieveProduct() {return product;}
}
public class Director {private Builder builder;public Director(Builder builder) {this.builder = builder;}/*** 产品构造方法,负责调用各个零件建造方法*/public void construct() {builder.buildPart1();builder.buildPart2();}
}
public class Client {public static void main(String[] args) {Builder builder = new ConcreteBuilder();Director director = new Director(builder);director.construct();Product product = builder.retrieveProduct();System.out.println(product.getPart1());System.out.println(product.getPart2());}
}
输出结果:
构建第1个部件
构建第2个部件

5. 总结

建造模式分成两个很重要的部分:

(1)一部分是Builder接口,这里是定义了如何构建各个部件,也就是知道每个部件功能如何实现,以及如何装配这些部件到产品中。

(2)另外一个部分是Director,Director是知道如何组合来构建产品,也就是说Director负责整体的构建算法,而且通常是分步骤地来执行。

  不管如何变化,建造模式都存在这么两个部分,一个部分是部件构造和产品装配,另一个部分是整体构建的算法。认识这点是很重要的,因为在建造模式中,强调的是固定整体构建的算法,而灵活扩展和切换部件的具体构造和产品装配的方式。

  再直白点说,建造模式的重心在于分离构建算法和具体的构造实现,从而使得构建算法可以重用。具体的构造实现可以很方便地扩展和切换,从而可以灵活地组合来构造出不同的产品对象。

JAVA设计模式是个什么玩意儿_04_建造者模式相关推荐

  1. JAVA设计模式是个什么玩意儿_00_工厂模式家族准备篇_简单工厂模式

    1. 前言 又叫静态工厂方法(Static Factory Method)模式. 它并不是GoF那23种设计模式之一. 简单工厂模式是工厂模式家族中最简单实用的模式. 虽然很简单,但它是学习工厂方法模 ...

  2. Java设计模式之行为型:责任链模式

    背景: 学校规定参加校招的同学必须要请假,且要有相关人员的签字,三天以下需辅导员签字.三到七天需要系主任签字,一个星期以上需要院长签字,更多的则需要校长签字! 上图将学生.辅导员.系主任.院长.校长组 ...

  3. Java设计模式之结构型:享元模式

    一.什么是享元模式: 享元模式通过共享技术有效地支持细粒度.状态变化小的对象复用,当系统中存在有多个相同的对象,那么只共享一份,不必每个都去实例化一个对象,极大地减少系统中对象的数量.比如说一个文本系 ...

  4. Java设计模式之结构型:装饰器模式

    一.什么是装饰器模式: 当需要对类的功能进行拓展时,一般可以使用继承,但如果需要拓展的功能种类很繁多,那势必会生成很多子类,增加系统的复杂性,并且使用继承实现功能拓展时,我们必须能够预见这些拓展功能, ...

  5. Java设计模式(7)装饰模式(Decorator模式)

    Decorator常被翻译成"装饰",我觉得翻译成"油漆工"更形象点,油漆工(decorator)是用来刷油漆的,那么被刷油漆的对象我们称decoratee.这 ...

  6. Java设计模式之行为型:中介者模式

     前言: 在我们的生活中处处充斥着"中介者",比如你租房.买房.找工作.旅游等等可能都需要那些中介者的帮助,地球上国与国之间的关系异常复杂,会因为各种各样的利益关系来结成盟友或者敌 ...

  7. 【每天一个java设计模式(二十三)】 - 访问者模式

    在访问者模式中,我们使用了一个访问者类,它改变了元素类的执行算法.通过这种方式,元素的执行算法可以随着访问者改变而改变.这种类型的设计模式属于行为型模式.根据模式,元素对象已接受访问者对象,这样访问者 ...

  8. 【每天一个java设计模式(十五)】 - 命令模式

    命令模式是一种数据驱动的设计模式,它属于行为型模式.请求以命令的形式包裹在对象中,并传给调用对象.调用对象寻找可以处理该命令的合适的对象,并把该命令传给相应的对象,该对象执行命令. 命令模式也就是一个 ...

  9. 【每天一个java设计模式(十四)】 - 解释器模式

    解释器模式提供了评估语言的语法或表达式的方式,它属于行为型模式.这种模式实现了一个表达式接口,该接口解释一个特定的上下文. 解释器模式主要包括以下几个部分: 抽象表达式角色:定义解释器的接口,约定解释 ...

最新文章

  1. linux系统下对网站实施负载均衡+高可用集群需要考虑的几点
  2. magento 让某个页面开启SSL访问
  3. 前端学习(2306):react之组件使用之图片使用
  4. 【转】Windows消息传递机制详解
  5. docker安装的PHPFPM容器Redis扩展
  6. 免责协议怎么写_员工辞职时,HR得让他这样写离职申请!
  7. json字符串与js对象转换
  8. MFC框架类、文档类、视图类相互访问的方法
  9. wordpress代码高亮插件coolcode
  10. Shell 神技:掩盖 Linux 服务器上的操作痕迹
  11. babel与php,javascript – Babel JS babel-preset-php错误
  12. python爬取动态网页_Python实现爬取网页中动态加载的数据
  13. Windows Server 2008 R2入门之FTP服务器
  14. 【比特率和波特率】bit rate VS baud rate
  15. 2022危险化学品生产单位安全生产管理人员考试试题模拟考试平台操作
  16. torch.nn.Module.parameters(recurse=True)
  17. 如何恢复计算机隐藏的文件夹,隐藏文件夹,小编教你电脑隐藏文件夹怎么恢复...
  18. [转载]Android开发网上的一些重要知识点
  19. python 方波信号_numpy绘制方波及方波无穷级数的表示
  20. 平衡二叉树、B树、B+树,B*树的区别与联系

热门文章

  1. Windchill 高级查询怎么写1=1
  2. python怎么缩进_怎么使用python缩进
  3. Linux快速学习-进程号端口查询
  4. 【DBN数据预测】基于matlab粒子群算法优化DBN数据预测【含Matlab源码 1420期】
  5. php xdebug 配置详解,PHP Xdebug调试配置
  6. 单反手动对焦M档,AV,TV,P,A,A-DEP
  7. 腐蚀环境装饰要求较高护栏装饰用氟碳防腐面漆 漆膜结构致密
  8. matlab 线性索引 转换,自己编写的 matlab 线性索引转换下标 函数
  9. (PAT)统计给定区间内的三位数中有两位数字相同的完全平方数(如144、676)的个数
  10. 电销技术突破,智能电销外呼系统革新电销模式