欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

5.建造者模式(Builder Pattern)

程序员文章站 2022-05-04 22:22:52
...

1.定义:

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

 

2.注意事项

建造者模式关注的是零件类型和装配工艺(顺序),这是它与工厂方法模式最大不同的地方,虽然同为创建类模式,但是注重点不同。

建造者模式和工厂方法模式非常相像,以下是它们之间的区别:

建造者模式最主要的功能是基本方法的调用顺序安排,也就是这些基本方法已经实现了,通俗的讲就是零件的装配,顺序不同产生的对象也不同;而工厂方法模式则重点是创建,创建零件是它的主要职责,组装顺序则不是它关心的

 

3.建造者模式的使用场景:

  • 相同的方法,不同的执行顺序,产生不同的事件结果时,可以采用建造者模式。
  • 多个部件或零件,都可以装配到一个对象中,但是产生的运行结果又不相同时,则可以使用该模式。
  • 产品类非常复杂,或者产品类中的调用顺序不同产生了不同的效能,这个时候使用建造者模式非常合适。
  • 在对象创建过程中会使用到系统的一些其他对象,这些对象在产品对象的创建过程中不易得到时,也可以采用建造者模式封装该对象的创建过程。

4.通用代码:

package _5BuilderPattern;

// 产品类
public class Product {

	public void doSomething1()
	{
		// 独立业务处理
	}
	
	public void doSomething2()
	{
		// 独立业务处理
	}
}

 

package _5BuilderPattern;

// 抽象建造者
public interface Builder {

	// 设置产品的不同部分(以不同的顺序调用产品方法)
	public void setPart(Object obj);
	
	// 建造产品
	public Product buildProduct();
}

 

package _5BuilderPattern;

import java.util.List;

// 具体建造者
public class ProductBuilder implements Builder {

	private Product product = new Product();
	
	@SuppressWarnings("unchecked")
	@Override
	public void setPart(Object obj) {
		// 这里方法的调用顺序不同,就产生了建造的产品不一样
		// 该顺序可以在导演类(下面会介绍)中通过参数的形式的决定
		List<String> methods = (List<String>)obj;
		for (String methodString : methods)
		{
			if(methodString.equals("doSomething1"))
			{
				product.doSomething1();
			}
			else if(methodString.equals("doSomething2"))
			{
				product.doSomething2();
			}
		}
	}

	@Override
	public Product buildProduct() {
		return product;
	}

}

 

package _5BuilderPattern;

import java.util.ArrayList;
import java.util.List;

// 导演类
public class Director {
	
	private Builder builder = new ProductBuilder();
	
	// 构建不同的产品
	public Product getProduct()
	{
		List<String> methods = new ArrayList<String>();
		methods.add("doSomething2");
		methods.add("doSomething1");
		builder.setPart(methods);
		return builder.buildProduct();
	}
}

 

此处使用了导演类,该类起到封装的作用,避免高层模块深入到建造者内部的实现类。当然,在建造者模式较庞大时,导演类可以有多个。

 

5.建造者模式的优点:

  • 封装性,使用建造者模式可以使客户端不必知道产品内部组成的细节
  • 建造者独立,容易扩展
  • 便于控制细节风险

 

相关标签: 建造者模式