Java设计模式-Builder生成器模式
概念:
生成器模式也称之为建造者模式。生成器模式的意图在于将一个复杂的构建与其表示相分离,构建与产品分离。
UML:

Ibuild接口清晰地反映了创建产品Product的流程。
生成器模式涉及4个关键角色:产品(Product),抽象生成器(IBuilder),具体生成器(Builder),指挥者(Director).
代码演示:
(1)定义1个产品类
public class Unit1{...}
public class Unit2{...}
public class Unit3{...}
public class Product
{
Unit1 u1;
Unit2 u2;
Unit3 u3;
}
(2)定义n个生成器Builder类
public interface IBuild
{
public void createUnit1();
public void createUnit2();
public void createUnit3();
public Product composite();
public Product create();
} public class BuildProduct implements IBuild
{
Product p = new Product();
public void createUnit1(){
//p.u1 = ...
}
public Product create(){
return composite();
}
......
} public class BuildProduct1 implements IBuild
{
Product p = new Product();
public void createUnit1(){
//p.u1 = ...
}
......
}
(3)定义一个统一调度类也叫指挥者(Director).是对生成器接口IBuilder的封装。
public class Director
{
private IBuild build;
public Director(IBuild build){
this.build = buid;
}
public Product build(){
build.create();
}
public static void main(){
IBuild build = new BuildProduct();
Director direcotr = new Director(build);
Prodcut p = director.build();
}
}
另一种实现方式:
利用Product1派生类方法,也可以实现类似的生成器功能。

代码演示:
//定义抽象生成器
public abstract class Product
{
Unit1 u1;
Unit2 u2;
....
abstract void createUnit1();
abstract void createUnit2();
...
abstract void composite();
} //定义具体生成器
public class BuildProduct extends Product
{
void createUnit1() { u1=.... }
....
void composite(){ /*关联 u1, u2, u3*/}
} //定义指挥者类
public class Director
{
Product p;
public Director(Product p)
{
this.p = p;
}
void build()
{
p.createUnit1();
p.createUnit2();
....
p.composite();
}
}
总之,对于生成器模式创建复杂对象而言,主要原则是对象构造过程与表示相分离。
Java设计模式-Builder生成器模式的更多相关文章
- Java设计模式:生成器模式
问题的提出: 有些类很容易创建对象,直接调用其构造方法,例如Student student = new Student("1001","zhang",21); ...
- 设计模式--Builder生成器模式
如果文章中哪里有问题,希望各位大哥大姐指出,小弟十分感激. 正文 什么是生成器模式? 生成器模式就是把生产对象的过程进一步抽取.细化.独立.以往我们生产对象,可能就是在一个小作坊里面从头做到尾.现在用 ...
- 每天一个设计模式-7 生成器模式(Builder)
每天一个设计模式-7 生成器模式(Builder) 一.实际问题 在讨论工厂方法模式的时候,提到了一个导出数据的应用框架,但是并没有涉及到导出数据的具体实现,这次通过生成器模式来简单实现导出成文本,X ...
- 设计模式03: Builder 生成器模式(创建型模式)
Builder生成器模式(创建型模式) Builder模式缘起假设创建游戏中的一个房屋House设施,该房屋的构建由几个部分组成,且各个部分富于变化.如果使用最直观的设计方法,每个房屋部分的变化,都将 ...
- 【设计模式】- 生成器模式(Builder)
生成器模式 建造者模式.Builder 生成器模式 也叫建造者模式,可以理解成可以分步骤创建一个复杂的对象.在该模式中允许你使用相同的创建代码生成不同类型和形式的对象. 生成器的结构模式 生成器(Bu ...
- Java 设计模式之建造者模式(四)
原文地址:Java 设计模式之建造者模式(四) 博客地址:http://www.extlight.com 一.前言 今天继续介绍 Java 设计模式中的创建型模式--建造者模式.上篇设计模式的主题为 ...
- 折腾Java设计模式之建造者模式
博文原址:折腾Java设计模式之建造者模式 建造者模式 Separate the construction of a complex object from its representation, a ...
- 折腾Java设计模式之模板方法模式
博客原文地址:折腾Java设计模式之模板方法模式 模板方法模式 Define the skeleton of an algorithm in an operation, deferring some ...
- java设计模式6--适配器模式(Adapter )
本文地址:http://www.cnblogs.com/archimedes/p/java-adapter-pattern.html,转载请注明源地址. 适配器模式(别名:包装器) 将一个类的接口转换 ...
随机推荐
- PHP框架 Laravel Eloquent ORM 批量插入数据 && 批量更新目前没有
foreach ($products as $v=>$a) { $count[] = array('product_name' => $a['name'], 'product_weight ...
- ArrayList,Vector线程安全性测试
import java.util.ArrayList; import java.util.List; //实现Runnable接口的线程 public class HelloThread implem ...
- What is the difference between <%, <%=, <%# and -%> in ERB in Rails?
http://stackoverflow.com/questions/998979/difference-between-and-in-rails/25617607#25617607 http://s ...
- java基础-排序
冒泡排序 选择排序 生成数组,数组元素值为1-1000
- notepad++查看aspx
源地址:http://www.cnblogs.com/qingliuyu/archive/2012/03/12/2392633.html 对于.net项目,微软设计了很多独有的扩展名,如.aspx, ...
- RDLC添加页码
页脚显示页码并总页数首先添加页脚,在页脚拖一textbox,textbox的表达式输入:="第" & Globals!PageNumber & "页 共& ...
- Dubbo 应用容器
Dubbo的容器模块,是一个独立的容器,因为服务通常不需要Tomcat/JBoss等Web容器的特性,没必要用Web容器去加载服务. 服务容器只是一个简单的Main方法,并加载一个简单的Spring容 ...
- sql server 2008 System.Data.SqlClient.SqlException (0x80131904): 查询处理器未能为执行并行查询启动必要的线程资源 处理方法
修改并行度: 修改了这个“最大并行度”,如果再没出现 cxpacket应该没问题了 参考资料:http://jingyan.baidu.com/article/5d6edee22daf8799eade ...
- poj 3080 Blue Jeans
点击打开链接 Blue Jeans Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 10243 Accepted: 434 ...
- PinYinCls
using System;using System.Data;using System.Configuration;using System.Linq;using System.Web;using S ...