原创作品,可以转载,但是请标注出处地址:http://www.cnblogs.com/V1haoge/p/6553374.html

  构建者模式,又称建造者模式,将一部负责对象的构建分为许多小对象的构建,最后在整合构建的模式。

  构建者模式一般用在构建流程或者组成部件固定的场合,将这些部件分开构建成为组件对象,再将这些组件对象整合成为目标对象。

  最佳实例就是组装台式电脑的情况,我们可以分别购买主板、CPU、内存、硬盘等部件,然后将这些部件组装在一起就形成了一台完整的电脑。

  参照如下类图可以比较明显了了解编码如何实现构建者模式:

  

  成员分析:

    Director:控制者类,这是控制整个组合过程,在这个类内部有个Construct()方法,这个方法的作用就是通过调用Builder内部的各个组件的生成方法来完成组装;

    Builder:构建者接口,定义各部件生成的方法;

    ConcreteBuilder:具体构建者类:实现Builder构建者接口,具体定义如何生成各个部件;依赖于Product成品类,其中还有获取成品组装结构的方法GetResult()方法;

    Product:成品类

  现在我们就以组装台式机为例来进行编码实现:

Builder:构建接口

 public interface Builder {
void build_CPU();
void build_mainboard();
void build_memory();
void build_DISK();
void build_power();
Computer getComputer();
}

ComputerBuilder:电脑构建类

 public class ComputerBuilder implements Builder {
private Computer computer = new Computer();
@Override
public void build_CPU() {
computer.parts.add("采用INTEL的CPU");
}
@Override
public void build_mainboard() {
computer.parts.add("采用大型主版");
}
@Override
public void build_memory() {
computer.parts.add("采用8G内存");
}
@Override
public void build_DISK() {
computer.parts.add("采用1TB固态硬盘");
}
@Override
public void build_power() {
computer.parts.add("采用XXX电源");
}
@Override
public Computer getComputer() {
return computer;
}
}

Director:组装类

 public class Director {
public void construct(Builder builder){
builder.build_CPU();
builder.build_mainboard();
builder.build_memory();
builder.build_DISK();
builder.build_power();
}
}

Computer:成品类

 import java.util.*;

 public class Computer {
List<String> parts = new ArrayList<String>();
public void show(){
for(String s:parts){
System.out.println(s);
}
}
}

Clienter:测试类

 public class Clienter {
public static void main(String[] args) {
Builder builder = new ComputerBuilder();
Director director = new Director();
director.construct(builder);
builder.getComputer().show();
}
}

执行结果:

采用INTEL的CPU
采用大型主版
采用8G内存
采用1TB固态硬盘
采用XXX电源

  从上面的示例中也可以很清楚的看到各个类与接口之间的关系,通过示例和类图就能够轻松了解构建者模式的编码结构,但是这种模式使用的场合限制较多,需要固定部件组合,一旦部件要增删,就需要更改代码。


同系列文章:

Java设计模式之《构建者模式》及应用场景的更多相关文章

  1. java设计模式之组合模式

    组合模式 组合模式,将对象组合成树形结构以表示“部分-整体”的层次结构,组合模式使得用户对单个对象和组合对象的使用具有一致性.掌握组合模式的重点是要理解清楚 “部分/整体” 还有 ”单个对象“ 与 & ...

  2. Java设计模式应用——组合模式

    组合模式实际上是一种树形数据结构.以windows目录系统举例,怎么样用java语言描述一个文件夹? 定义一个文件夹类,文件夹类中包含若干个子文件类和若干个文件类. 进一步抽象,把文件夹和文件都看做节 ...

  3. java设计模式5.组合模式、门面模式、享元模式、桥接模式

    组合模式 在面向对象的语言中,树结构有着巨大的威力,一个基于继承的类型的等级结构便是一个数结构,一个基于合成的对象结构也是一个数结构.组合模式将部分与整体的关系用树结构表示出来,使得客户端把一个个单独 ...

  4. JAVA设计模式之组合模式(composite)

    组合模式:树状结构专用模式 代码如下: package com.srr.dp.composite; import java.util.ArrayList; import java.util.List; ...

  5. 老和尚给小和尚讲故事引发了Java设计模式:组合模式

    目录 示例 组合模式 定义 意图 主要解决问题 优缺点 安全式和透明式的组合模式 安全式的合成模式的结构 透明式的合成模式的结构 老和尚和小和尚的故事 示例 有一个绘图系统,可以描绘各种图形,假设现在 ...

  6. Java设计模式之模板模式及使用场景

    模板模式,顾名思义,就是通过模板拓印的方式. 定义模板,就是定义框架.结构.原型.定义一个我们共同遵守的约定. 定义了模板,我们的剩余工作就是对其进行充实.丰润,完善它的不足之处. 定义模板采用抽象类 ...

  7. Java设计模式之代理模式(静态代理和JDK、CGLib动态代理)以及应用场景

    我做了个例子 ,需要可以下载源码:代理模式 1.前言: Spring 的AOP 面向切面编程,是通过动态代理实现的, 由两部分组成:(a) 如果有接口的话 通过 JDK 接口级别的代理 (b) 如果没 ...

  8. Java设计模式——装饰者模式

    JAVA 设计模式 装饰者模式 用途 装饰者模式 (Decorator) 动态地给一个对象添加一些额外的职责.就增加功能来说,Decorator 模式相比生成子类更为灵活. 装饰者模式是一种结构式模式 ...

  9. JAVA设计模式--装饰器模式

    装饰器模式 装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其结构.这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装. 这种模式创建了一个装饰 ...

  10. 折腾Java设计模式之访问者模式

    博客原文地址:折腾Java设计模式之访问者模式 访问者模式 Represent an operation to be performed on the elements of an object st ...

随机推荐

  1. keil5到iar8的使用配置迁移

      1.关于头文件的包含. keil: ALT+F7——>C/C++ IAR:ALT+F7——>C/C++ Compiler——>Preprocessor,(高版本汇编需要包含的头文 ...

  2. 第43章:MongoDB-集群--Sharding(分片)--多机的搭建

    ①环境准备 服务器规划 服务器[192.168.0.75] 服务器[192.168.0.84] 服务器[192.168.0.86] mongos mongos mongos config server ...

  3. php5.6,Ajax报错,Warning: Cannot modify header information - headers already sent in Unknown on line 0

    php5.6ajax报错 Deprecated: Automatically populating $HTTP_RAW_POST_DATA is deprecated and will be remo ...

  4. php面试题--并列排名问题

    给定一个二维数组: <?php $data = [ ['name' =>'j1', 'score' => '80'], ['name' =>'j2', 'score' => ...

  5. Delphi XE7试用记录2

    Delphi XE7试用记录2 万一博客中介绍了不少Delphi7以后的新功能测试,想跟着测试一下.每次测试建立一个工程,在窗体上放几个按钮,测试几个相关的功能,这样虽然简单明了,但日后查阅起来不方便 ...

  6. Linux安装gcc/g++

    直接使用yum安装 yum install gcc yum -y install gcc-c++ 如果为RedHat  yum需要注册 可以参考更换yum源 https://www.cnblogs.c ...

  7. 3-Fiddler修改请求或响应内容

    1.修改请求内容 方法一:设置请求前断点,修改请求后发送 1)设置断点 2)选中请求,在inspectors下修改请求内容 3)修改请求后,点击Break on Response按钮,进行请求的发送 ...

  8. Git使用详细教程(5):修改提交说明

    在使用git的过程中,我们有时在提交时,注释说明会写错,那么我们该如何修改这次提交说明呢?在SVN上我们只能在代码的某个地方加一个不影响功能的空格再次提交,然后写新说明.但是在Git中我们可以吃后悔药 ...

  9. 第二节:Java入门第一行代码

    前言 大家好,今天带来Java入门第一行代码的概述,希望你们喜欢 第一行代码 学习Java基础课程,学会使用eclipse,eclipse为Java集成开发坏境IDE,创建第一个Java源文件代码: ...

  10. Node.js(day1)

    一.什么是Node.js Node.js Everywhere 我们可以从官网的介绍来分析:node中文网 | node引文网 Node.js® 是一个基于 Chrome V8 引擎 的 JavaSc ...