• 公用技术——设计模式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程序。

  • 相关阅读:
    《Effective Java中文版第二版》读书笔记
    【jQuery插件】使用cropper实现简单的头像裁剪并上传
    【17-06-19】Java进阶自测:面向对象基础知识掌握了吗?(附答案及个人解析)
    【17-06-16】Java入门测试题,测测你基础知识掌握程度(附答案及个人解析)
    Eclipse配置python开发环境
    PyCharm 安装教程(Windows)
    redis学习-列表(list)常用命令
    redis学习-集合set常用命令
    redis学习-散列表常用命令(hash)
    redis学习-string常用命令
  • 原文地址:https://www.cnblogs.com/rain144576/p/9940921.html
Copyright © 2020-2023  润新知