建造模式(Builder)

建造模式是对象的创建模式。建造模式可以将一个产品的内部表象与产品的生成过程分割开来,从而可以使一个建造过程生成具有不同的内部表象的产品对象。

产品的内部表象

           一个产品常有不同的组成成分作为产品的零件。比如,一个电子邮件有发件人地址、收件人地址、主题、内容、附录等部分,而在最起码的收件人地址得到赋值之前,这个电子邮件不能发出。还有一些情况下,一个对象的一些性质必须按照某个顺序赋值才有意义。在某个性质没有赋值之前,另一个性质则无法赋值。这些情况使得性质本身的建造涉及到复杂的商业逻辑。这时候,此对象相当于一个有待建造的产品,而对象的这些性质相当于产品的零件,建造产品的过程是建造零件的过程。由于建造零件的过程很复杂,因此,这些零件的建造过程往往被“外部化”到另外一个称做建造者的对象里,建造者对象返还给客户端的是一个全部零件都建造完毕的产品对象。

建造模式非常适合于此种情况。建造模式将产品结构和产品的零件建造过程对客户端隐藏起来,达到责任划分和封装的目的。

下面给出一个示意性的系统实现。该系统涉及到四个角色:

  • 抽象建造者(builder)角色:这是一个抽象的接口,以规范产品对象各个组成成分的建造。该接口一般包含两种方法,一种是建造方法:例如本例中的buildPart1(),buildPart2()。另一种是结果返还方法:即本例中的retrieveResult()方法。一般来说产品所包含的零件数目与建造方法的数目相等。换言之,有多少零件就有多少的建造方法。
  • 具体建造者角色(ConcreteBuilder):抽象建造者角色的具体实现,这个类与应用程序紧密相关,它们在应用程序的调用下创建产品的实例。这个角色主要完成的任务有:
  1. 实现抽象建造者角色所声明的接口,给出一步一步完成产品创建的操作
  2. 在建造过程完成后,提供产品的实例
  • 导演者角色(Director):担任这个角色的类调用具体建造者角色来完成产品对象的创建。
  • 产品角色(Product):产品便是建造中的复杂对象。一般一个系统中会有多于一个的产品类,而且这些产品类不一定有共同的接口,而完全可以是不相关的。

导演者角色是与客户端打交道的角色。导演者角色将客户端创建产品的请求划分为对各个零件的建造请求,再把这些请求委派给具体建造者角色。具体建造者角色是做具体建造工作的,但却不为客户端所知。

一下是系统源代码:

/*
 * 导演者角色
 * */
public class Director {
	private Builder builder;
	/*
	 * 产品的构建方法,负责调用各个零件的构建方法
	 * */
	public void construct()
	{
		builder=new ConcreteBuilder();
		builder.buildPart1();
		builder.buildPart2();
		builder.retrieveResult();
	}
}
/*
 * 抽象建造者角色
 * */
public abstract class Builder {
	/*
	 * 产品零件构建方法
	 * */
	public abstract void buildPart1();
	/*
	 * 产品零件构建方法
	 * */
	public abstract void buildPart2();
	/*
	 * 产品返还方法
	 * */
	public abstract Product retrieveResult();
}
/*
 * 具体建造者角色
 * */
public class ConcreteBuilder extends Builder {

	private Product product=new Product();
	@Override
	public void buildPart1() {
		// TODO Auto-generated method stub

	}

	@Override
	public void buildPart2() {
		// TODO Auto-generated method stub

	}

	@Override
	public Product retrieveResult() {
		// TODO Auto-generated method stub
		return product;
	}

}
/*
 * 产品角色
 * */
public class Product {

}

这里仅仅给出的是一个示意性的系统实现,建造者模式的具体应用请参考另一篇文章

时间: 2024-11-08 20:15:23

建造模式(Builder)的相关文章

设计模式之七:建造模式(Builder Pattern)

建造者模式就是将一个复杂对象的构造与它的表示分离,使同样的构建过程可以创建不同的表示. 适用范围: 当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时. 当构造过程必须允许被构造的对象有不同表示时. 建造者模式里面有四个角色: Builder: 给出一个抽象接口,以规范产品对象的各个组成部分的建造.一般而言,此接口独立于应用程序的业务逻辑.模式中直接创建产品对象的具体创建者角色.具体创建者角色必须实现这个接口的所有方法:一个是建造方法,另一个是结果返还方法. ConcreteBu

【java设计模式】【创建模式Creational Pattern】建造模式Builder Pattern

1 package com.tn.pattern; 2 3 public class Client { 4 public static void main(String[] args) { 5 Director director=Director.getInstance(); 6 director.construct(new ConcreteBuilder1()); 7 director.construct(new ConcreteBuilder2()); 8 } 9 } 10 11 class

建造者模式(Builder)

定义 (本人在阅读完本书的中英两个版本之后发现对建造者模式十窍懂了九窍,所以直接去网上搜别人的分析了,所以本章大部分是根据网上的资料收集来的,此外,代码例子表示本书的例子不合适,也换了,所以本章和这本书关系不大.) 建造者模式是将一个复杂的对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示.建造者模式最重要的两个角色:抽象建造者(Builder)和指导者(Director),其中建造者知道怎么(How)去建造产品,而指导者知道去制造什么(What)产品,建造者模式用建房子的例子来说明

23种设计模式--建造者模式-Builder Pattern

一.建造模式的介绍       建造者模式就是将零件组装成一个整体,用官方一点的话来讲就是将一个复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表示.生活中比如说组装电脑,汽车等等这些都是建造者模式的具体体现,组装电脑反应到软件上就是一个复杂的对象,然后我们使用建造者模式的时候需要抽象一个建造类,抽象一个指挥者指挥具体实现的那个类,然后就是具体实现这个对象的类,这样就避免了每新创建一个不同的复杂对象就需要重新写一下这个类,这样就只要重写建造者就可以了,我们接下来就用组装电脑这个来说明一

设计模式:建造模式

原文地址:http://leihuang.org/2014/12/03/builder/ Creational 模式 物件的产生需要消耗系统资源,所以如何有效率的产生.管理 与操作物件,一直都是值得讨论的课题, Creational 模式即与物件的建立相关,在这个分类下的模式给出了一些指导原则及设计的方向.下面列举到的全属于Creational 模式 Simple Factory 模式 Abstract Factory 模式 Builder 模式 Factory Method 模式 Protot

《JAVA与模式》之建造模式

在阎宏博士的<JAVA与模式>一书中开头是这样描述建造(Builder)模式的: 建造模式是对象的创建模式.建造模式可以将一个产品的内部表象(internal representation)与产品的生产过程分割开来,从而可以使一个建造过程生成具有不同的内部表象的产品对象. 产品的内部表象 一个产品常有不同的组成成分作为产品的零件,这些零件有可能是对象,也有可能不是对象,它们通常又叫做产品的内部表象(internal representation).不同的产品可以有不同的内部表象,也就是不同的零

设计模式笔记——建造模式

定义:讲一个复杂对象的构建与它的表示相分离,使得同样的构建过程可以创建不同的表示.  将构造复杂对象的过程和组成对象的部件解耦 使用情况,满足以下条件可以考虑使用建造模式搭建框架: 1.产品有复杂的内部结构 2.系统中对此产品的需求将来可能改变产品对象的内部结构构成 3.不能将产品的内部构造完全暴漏给客户,一是为了可用性,二是为了安全因素 建造模式的组成: 1.抽象建造者角色(Builder):用来规范产品对象的哥哥组成成分的建造.一般而言,此角色独立于应用程序的业务逻辑. 2. 具体建造角色(

建造模式

建造模式将一个产品的内部表象与产品的生成过程分割开来,从而使一个建造过程可以生成具有不同内部表象的产品对象. public class Director { public void construct(){                 Builder builder1 = new ConcreteBuilder1();                 builder1.buildPart1();                 builder1.buildPart2();         

建造者模式&lt;Builder&gt;

概述 将一个复杂对象的构造与它的表示分离,使同样的构建过程可以创建不同的表示,这样的设计模式被称为建造者模式 角色 建造者(Builder):为创建一个产品对象的各个部件指定抽象接口. 具体建造者(ConcreteBuilder):实现Builder的接口以构造和装配该产品的各个部件,定义并明确它所创建的表示,并 提供一个检索产品的接口 产品(Product):表示被构造的复杂对象.ConcreteBuilder创建该产品的内部表示并定义它的装配过程,包含定义组成部件的类,包括将这些部件装配成最