详解构造者模式及Hibernate中的Builder
定义:建造者模式(Builder Pattern)使用多个简单的对象一步一步构建成一个复杂的对象。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。一个 Builder 类会一步一步构造最终的对象。该 Builder 类是独立于其他对象的。
使用目的:为了灵活构造复杂对象,该对象会有多个成员变量,在外部调用的时候,不需要或者不方便一次性创建出所有的成员变量,在这种情况下,使用多个构造方法去构建对象,很难维护,这时候Builder设计模式解决这个问题,进行buid()方法中创建对象,并且将builder传入,该builder中,维护了传入对象的成员变量。
uml建模图:
使用场景:
多个部件或者零件,都可以装配到一个对象中,但是产生的运行结果又相同。
产品类非常复杂,或者产品类中调用顺序不同产生了不同的作用。
初始化一个对象特别复杂,如使用多个构造方法,或者说有很多参数,并且都有默认值时。
核心类:
以组装一台计算机为主,主要进行组装主机,设置操作系统,设置显示器。
(1) 抽象产品类 computer。
(2) Builder 抽象 Builder,规范产品的组建,一般是由子类实现具体的组建过程。
(3)MacbookBuilder 具体的Builder类,具体的创建对象的类。
(4) Directror 统一组建过程。
Demo:
计算机抽象类:
具体产品类Macbook
抽象builder
具体的builder
Director类,负责具体的构造Computer
具体使用:
Hibernate中的Builder
2.1 BootstrapServiceRegistryBuilder
在Hibernate中老版本中用的一个Builder应该就是BootstrapServiceRegistryBuilder,它负责创建BootstrapServiceRegistry(基础服务注册中心):
BootstrapServiceRegistry中注册的了固定的三个基础服务ClassLoaderService(类加载器服务)、StrategySelector(决策选择器)、IntegratorService(集成服务),其中StrategySelector又是由对应的StrategySelectorBuilder来创建。
2.2 StandardServiceRegistryBuilder
StandardServiceRegistryBuilder用于创建StandardServiceRegistry(标准服务注册中心),这里将注册Hibernate中需要用到的大量服务
配置文件是由这个StandardServiceRegistryBuilder来装载的原因
这正是Hibernate里面Builder模式的主要作用,Builder在创建对象之前需要先获取对象创建参数,然后执行参数判断逻辑,最终创建出目标对象,而此处StandardServiceRegistryBuilder的参数来源就是hibernate配置文件,因此用它来装载配置文件解析其中的参数然后才能创建目标对象。