【设计模式】—— 创建者模式Builder
时间:2022-04-22
本文章向大家介绍【设计模式】—— 创建者模式Builder,主要内容包括模式意图、模式结构、使用场景、代码结构、生活中的设计模式、基本概念、基础应用、原理机制和需要注意的事项等,并结合实例形式分析了其使用技巧,希望通过本文能帮助到大家理解应用这部分内容。
模式意图
一个对象的创建十分复杂,为了区分构建过程和使用过程,因此分开。使用一个Director类进行对象的创建,Builder规定了这个创建过程。
模式结构
Builder 抽象建造者接口,规范各个组成部分的构建。
ConcreteBuilder 具体建造者角色,实现组成部分的构建,并提供示例。
Product 产品角色,创建返回的对象。
Director 导演者角色,负责创建以及使用。
使用场景
1 当创建对象复杂并且与其使用过程独立。
2 构造过程允许构造的对象有不同的表示。
代码结构
Builder接口
1 abstract class Builder{
2 public abstract void buildPart1();
3 public abstract void buildPart2();
4 public abstract Product retrieveResult();
5 }
ConcreteBuilder 具体产品
1 class ConcreteBuilder extends Builder{
2 public void buildPart1() {
3
4 }
5 public void buildPart2() {
6
7 }
8 public Product retrieveResult() {
9 return null;
10 }
11 }
Product 产品
1 class Product{
2 //Anything
3 }
Director 导演者角色
1 class Director{
2 private Builder builder;
3 public void Constructor(){
4 builder = new ConcreteBuilder();
5 builder.buildPart1();
6 builder.buildPart2();
7 builder.retrieveResult();
8 }
9 }
生活中的设计模式
‘ 近年来,变形金刚4出了也快半年了,但是还是喜欢第一部的女主角。
而擎天柱队长,经典的台词,“汽车人变身”也是伴随着复杂的变化过程。而汽车人的转变只在一瞬之间,看起来行云流水,这就有点创建者的味道。擎天柱的各个身体部分经过复杂的变化,最后变身成为汽车人。
1 /**
2 * Builder
3 */
4 interface Transformer{
5 public void Create_Head();
6 public void Create_Body();
7
8 public Autobots transforming();
9 }
10 /**
11 * ConcreteBuilder
12 */
13 class Transformer_Captain implements Transformer{
14 public void Create_Head() {
15 System.out.println("变形出脑袋...");
16 }
17 public void Create_Body() {
18 System.out.println("变形出身体...");
19 }
20 public Autobots transforming() {
21 return new Autobots();
22 }
23 }
24 /**
25 * Product
26 */
27 class Autobots{
28 Autobots(){
29 System.out.println("啊!...变形金刚 变身....");
30 }
31 }
32 /**
33 * 这个类当做Director
34 */
35 public class TransformerBuilder {
36
37 public static Autobots Transforming(Transformer optimusPrime){
38 optimusPrime.Create_Head();
39 optimusPrime.Create_Body();
40 return optimusPrime.transforming();
41 }
42
43 public static void main(String[] args){
44 Transformer optimusPrime = new Transformer_Captain();
45 Transforming(optimusPrime);
46 }
47
48 }
变身结果
变形出脑袋...
变形出身体...
啊!...变形金刚 变身....
- 碎片化 | 第六阶段-04-搭建nginx和Tomcat集群环境-视频
- SQL注入攻防入门详解
- jQuery插件编写步骤详解
- 深入探秘Neutron API
- 碎片化 | 第七阶段-10-session共享解决方案-视频
- CSS选择器是如何确定优先级的?
- JS中控制好this关键字的指向
- 碎片化 | 第四阶段-46-值栈valueStack介绍和原理-视频
- Laravel中运行Gulp任务的利器(一) —— Laravel Elixir简介及入门教程
- 碎片化 | 第四阶段-52-Hibernate特性-视频
- 碎片化 | 第四阶段-53-hibernate持久化session问题解决-视频
- 入门webpack(下)
- 巨头们关注的实时Web:发展与相关技术
- 碎片化 | 第四阶段-54-hibernate-spring整合流程-视频
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法