Java设计模式之《构建者模式》及应用场景
原创作品,可以转载,但是请标注出处地址: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设计模式之《适配器模式》及应用场景
 - Java设计模式之《外观模式》及应用场景
 - Java设计模式之《桥接模式》及应用场景
 - Java设计模式之《单例模式》及应用场景
 - Java设计模式之《观察者模式》及应用场景
 - Java设计模式之《调停者模式》及应用场景
 - Java设计模式之《代理模式》及应用场景
 - Java设计模式之《职责链模式》及应用场景
 - Java设计模式之《享元模式》及应用场景
 - Java设计模式之《构建者模式》及应用场景
 - Java设计模式之《模板模式》及使用场景
 - Java设计模式之《装饰器模式》及应用场景
 - Java设计模式之《工厂方法模式》及使用场景
 - Java设计模式之《抽象工厂模式》及使用场景
 
Java设计模式之《构建者模式》及应用场景的更多相关文章
- java设计模式之组合模式
		
组合模式 组合模式,将对象组合成树形结构以表示“部分-整体”的层次结构,组合模式使得用户对单个对象和组合对象的使用具有一致性.掌握组合模式的重点是要理解清楚 “部分/整体” 还有 ”单个对象“ 与 & ...
 - Java设计模式应用——组合模式
		
组合模式实际上是一种树形数据结构.以windows目录系统举例,怎么样用java语言描述一个文件夹? 定义一个文件夹类,文件夹类中包含若干个子文件类和若干个文件类. 进一步抽象,把文件夹和文件都看做节 ...
 - java设计模式5.组合模式、门面模式、享元模式、桥接模式
		
组合模式 在面向对象的语言中,树结构有着巨大的威力,一个基于继承的类型的等级结构便是一个数结构,一个基于合成的对象结构也是一个数结构.组合模式将部分与整体的关系用树结构表示出来,使得客户端把一个个单独 ...
 - JAVA设计模式之组合模式(composite)
		
组合模式:树状结构专用模式 代码如下: package com.srr.dp.composite; import java.util.ArrayList; import java.util.List; ...
 - 老和尚给小和尚讲故事引发了Java设计模式:组合模式
		
目录 示例 组合模式 定义 意图 主要解决问题 优缺点 安全式和透明式的组合模式 安全式的合成模式的结构 透明式的合成模式的结构 老和尚和小和尚的故事 示例 有一个绘图系统,可以描绘各种图形,假设现在 ...
 - Java设计模式之模板模式及使用场景
		
模板模式,顾名思义,就是通过模板拓印的方式. 定义模板,就是定义框架.结构.原型.定义一个我们共同遵守的约定. 定义了模板,我们的剩余工作就是对其进行充实.丰润,完善它的不足之处. 定义模板采用抽象类 ...
 - Java设计模式之代理模式(静态代理和JDK、CGLib动态代理)以及应用场景
		
我做了个例子 ,需要可以下载源码:代理模式 1.前言: Spring 的AOP 面向切面编程,是通过动态代理实现的, 由两部分组成:(a) 如果有接口的话 通过 JDK 接口级别的代理 (b) 如果没 ...
 - Java设计模式——装饰者模式
		
JAVA 设计模式 装饰者模式 用途 装饰者模式 (Decorator) 动态地给一个对象添加一些额外的职责.就增加功能来说,Decorator 模式相比生成子类更为灵活. 装饰者模式是一种结构式模式 ...
 - JAVA设计模式--装饰器模式
		
装饰器模式 装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其结构.这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装. 这种模式创建了一个装饰 ...
 - 折腾Java设计模式之访问者模式
		
博客原文地址:折腾Java设计模式之访问者模式 访问者模式 Represent an operation to be performed on the elements of an object st ...
 
随机推荐
- SQL Server数据库设置自动备份策略
			
一. 简单介绍 SQL Server自带的维护计划是一个非常有用的维护工具,能够完成大部分的数据库的维护任务. 数据库的备份也是日常工作中非常重要的一个环节.备份的方法非常的多. 今天给大家介绍最简单 ...
 - php hash_file
			
string hash_file ( string $algo , string $filename [, bool $raw_output = FALSE ] ) 参数¶ algo 要使用的哈希算法 ...
 - github install
			
1.安装git依赖包 yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel gcc perl-ExtUti ...
 - ios uibutton加数字角标
			
http://www.jianshu.com/p/0c7fae1cadac 第一种:https://github.com/mikeMTOL/UIBarButtonItem-Badge第二种:https ...
 - 谈谈一些有趣的CSS题目(十六)-- 奇妙的 background-clip: text
			
开本系列,谈谈一些有趣的 CSS 题目,题目类型天马行空,想到什么说什么,不仅为了拓宽一下解决问题的思路,更涉及一些容易忽视的 CSS 细节. 解题不考虑兼容性,题目天马行空,想到什么说什么,如果解题 ...
 - 谈谈 TCP 的 TIME_WAIT
			
由来 最近有同事在用 ab 进行服务压测,到 QPS 瓶颈后怀疑是起压机的问题,来跟我借测试机,于是我就趁机分析了一波起压机可能成为压测瓶颈的可能,除了网络 I/O.机器性能外,还考虑到了网络协议的问 ...
 - docker发布netcore网站-零散记录
			
安装docker 安装Linux,使用云服务器或者虚拟机 参考:http://www.cnblogs.com/wangjieguang/p/hyper-v-ubuntu.html 系统更新 sudo ...
 - 从PMP培训归来,跟大家聊聊做项目的套路
			
管理也是一些套路的传承,很多人说不去学专门的管理,照样把工作做得很好.是的,不是散打乱打就不能赢,只是会吃点亏而已.如果你有了套路在心中,那么必定会让自己车到山前开路,让事情更好办. 所以,我去学了几 ...
 - Java-二进制转10进制原理机制
			
任何文件在计算机储存时都是以二进制储存的,由 1和0 组成,如: 101010101010100111110100101010 现在有一组二进制数据: 10010110 那么他转成10进制是多少呢(我 ...
 - Robot Framework - 3 - 测试库API
			
08- 创建测试库--发布测试库 ***** 测试库文档 为了便于维护,测试库文档应该从源代码中生成. Robot Framework 有自己的文档工具 libdoc.py生成 API 文档. 一个 ...