公用技术——设计模式5——创建型模式——构建者模式

1、概念

与工厂模式大部分相同,区别在于工厂模式”封装”复杂的类结构,而构建者模式”封装”复杂的对象创建流程。

这样做的目的是:

  1. 对于框架设计者而言,”封装”复杂的对象创建流程,使得框架使用者在使用这些对象时,无需关注”如何创建它”,而只需关注”如何使用它”。
  2. 对于接口规范制定者,可以规范对象的创建流程,而由不同厂商提供具体的实现。

对于只需要通过new创建,或者直接可以使用spring框架获取的类,无需使用构建者模式。

它的解决方案:

  • 对于框架设计者而言,通常将类名定义为XXBuilder,该类提供build方法,该方法的返回值为所需对象。
  • 对于第二种场景,接口规范制定者需要明确对象的创建流程,并将这些流程分解为一系列的方法。

2、UML图

3、代码

  构建者接口

/**
 * 
 * @File Name: IBuilder.java
 * @Description: 构建者接口
 * @version 1.0
 * @since JDK 1.8
 */
public interface IBuilder {
	/**
	 * 
	 * @Title: step1
	 * @Description:第一步
	 */
	void step1();

	/**
	 * 
	 * @Title: step2
	 * @Description:第二步
	 */
	void step2();

	/**
	 * 
	 * @Title: step3
	 * @Description:第三步
	 */
	void step3();

	Product build();
}

  接口实现类

/**
 * 
 * @File Name: BuilderImpl.java 
 * @Description: 构建者接口实现类
 * @version 1.0
 * @since JDK 1.8
 */
public class BuilderImpl implements IBuilder {

	@Override
	public void step1() {

	}

	@Override
	public void step2() {

	}

	@Override
	public void step3() {

	}
	
	@Override
	public Product build() {

	}
}

4、讨论

   问题1:它的主要功能是什么?

  答:它的主要功能是”封装”在创建对象时的复杂流程。

  问题2:它与工厂模式的区别是什么?

  答:它与工厂模式的功能都是相同的,都是用于创建对象,本质在于程序抽象的现实问题的区别。

  举个示例,假设将框架设计者比作厨师,框架调用者比作饭店的顾客,此时作为调用者要做的事情只是打开菜单点餐,至于厨师的做饭过程不是我关心的。而作为厨师,顾客点餐之后,我需要准备食材,烧水,炒菜等一系列流程最终的产品就是顾客点的食物。构建者模式中,接口调用者不需了解对象复杂的创建流程,而只需要关注对象本身的功能即可。

  对于工厂模式,它是对复杂类结构的”封装”。举个示例,对于汽车,电脑等这些我并不关心每个部件从哪里来的,以及它是如何组装到一起的,我在乎的只是车的功能。工厂模式中,接口调用者无需关心对象组装的”细节”,而只需要关注对象本身的功能即可。

5、示例

  • Quartz框架中的JobBuilder
  • Mybatis框架中的SqlSessionFactoryBuilder

大部分名称以Builder结尾,有build方法基本都是构建者模式的例子。个人建议可以尝试制作蛋糕的流程模拟为Java程序。

原文地址:https://www.cnblogs.com/rain144576/p/9940921.html