`

生成器模式Builder

 
阅读更多

1. 定义
将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。

 

2. 结构图

Builder:生成器接口,定义创建一个Product对象所需的各个部件的操作。
ConcreteBuilder:具体的生成器实现,实现各个部件的创建,并负责组装Product对象的各个部件,同时还提供一个让用户获取组装完成后的产品对象的方法。
Director:指导者,也被称为导向者,主要用来使用Builder接口,以一个统一的过程来构建所需要的Product对象。
Product:产品,表示被生成器构建的复杂对象,包含多个部件。 

 

3. 本质
生成器模式的本质:分离整体构建算法和部件构造。
构建一个复杂的对象,本来就有构建的过程,以及构建过程中具体的实现。生成器模式就是用来分离这两个部分,从而使得程序结构更松散、扩展更容易、复用性更好,同时也会使得代码更清晰,意图更明确。

虽然在生成器模式的整体构建算法中,会一步一步引导Builder来构建对象,但这并不是说生成器主要就是用来实现分步骤构建对象的。生成器模式的中心还是在于分离整体构建算法和部件构造,而分步骤构建对象不过是整体构建算法的一个简单表现,或者说是一个附带产物。

 

4. Code Demo

Product.java

package org.fool.pattern.builder;

public interface Product {

}

Builder.java

package org.fool.pattern.builder;

public interface Builder {
	public void buildPart();
}

ConcreteBuilder.java

package org.fool.pattern.builder;

public class ConcreteBuilder implements Builder {

	private Product resultProduct;

	public Product getResult() {
		return resultProduct;
	}

	@Override
	public void buildPart() {
		System.out.println("build part...");
	}

}

Director.java

package org.fool.pattern.builder;

public class Director {
	private Builder builder;

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

	public void construct() {
		builder.buildPart();
	}

}

Client.java

package org.fool.pattern.builder;

public class Client {
	public static void main(String[] args) {
		ConcreteBuilder builder = new ConcreteBuilder();
		
		Director director = new Director(builder);
		
		director.construct();
		
		builder.getResult();
	}
}

 

  • 大小: 54.6 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics