1. 说明

(1)英文名叫Builder,建造者模式,也叫生成器模式。

(2)属于创建型模式。

2. 定义

java 与建模 java建模设计什么意思_java 与建模

       要想实现同样的构建过程有不同的表现,自然的思路就是把构建过程独立出来,在生成器模式中把它称为指导者,由它来知道装配过程,但是不负责具体的构建。当然只有指导者也是不够的,得有具体的对象生成器。这样指导者就是可以重用的构建过程,而生成器是可以被切换的具体实现。举个简单的例子,如汽车,有很多部件,车轮,方向盘,发动机还有各种小零件等等,部件很多,但远不止这些,如何将这些部件装配成一部汽车,这个装配过程也很复杂(需要很好的组装技术), builder模式就是为了将部件和组装分开。

3. 结构

java 与建模 java建模设计什么意思_设计模式_02

        分4个角色,抽象建造者角色(Builder)、具体建造者角色(ConcreteBuilder)、导演者角色(Director)、产品角色(Product),主要说导演者角色,导演者角色是与客户端打交道的角色。导演者将客户端创建产品的请求划分为对各个零件的建造请求,再将这些请求委派给具体建造者角色。具体建造者角色是做具体建造工作的,但是却不为客户端所知。

4. 代码

Product.java

Builder.java

ConcreteBuilder.java

Director.java

Client.java


public class Product {

	private String part1;
	private String part2;
	
	public String getPart1() {
		return part1;
	}
	public void setPart1(String part1) {
		this.part1 = part1;
	}
	public String getPart2() {
		return part2;
	}
	public void setPart2(String part2) {
		this.part2 = part2;
	}
}


public interface Builder {

	public void buildPart1();
	
	public void buildPart2();
	
	public Product retrieveProduct();
}



public class ConcreteBuilder implements Builder {

	private Product product = new Product();
	
	public void buildPart1() {
		product.setPart1("构建第1个部件");
	}

	public void buildPart2() {
		product.setPart2("构建第2个部件");
	}

	public Product retrieveProduct() {
		return product;
	}
}



public class Director {

	private Builder builder;

	public Director(Builder builder) {
		this.builder = builder;
	}

	/**
	 * 产品构造方法,负责调用各个零件建造方法
	 */
	public void construct() {
		builder.buildPart1();
		builder.buildPart2();
	}
}



public class Client {

	public static void main(String[] args) {
		Builder builder = new ConcreteBuilder();
		Director director = new Director(builder);
		
		director.construct();
		Product product = builder.retrieveProduct();
		System.out.println(product.getPart1());
		System.out.println(product.getPart2());
	}
}
输出结果:
构建第1个部件
构建第2个部件

5. 总结

建造模式分成两个很重要的部分:

(1)一部分是Builder接口,这里是定义了如何构建各个部件,也就是知道每个部件功能如何实现,以及如何装配这些部件到产品中。

(2)另外一个部分是Director,Director是知道如何组合来构建产品,也就是说Director负责整体的构建算法,而且通常是分步骤地来执行。

建造模式都存在这么两个部分,一个部分是部件构造和产品装配,另一个部分是整体构建的算法。认识这点是很重要的,因为在建造模式中,强调的是固定整体构建的算法,而灵活扩展和切换部件的具体构造和产品装配的方式。


  再直白点说,建造模式的重心在于分离构建算法和具体的构造实现,从而使得构建算法可以重用。具体的构造实现可以很方便地扩展和切换,从而可以灵活地组合来构造出不同的产品对象。