一、定义
Separate the construction of a complex object from its representation so that the same construction process can create different representations.(将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。)
二、构成
(二)类图
引用《设计模式之禅》中的类图:
其中:
- Product产品抽象
- ConcreteProduct具体产品类
- Builder抽象建造者 规范产品的组建,一般是由子类实现。
- ConcreteBuilder具体建造者 实现抽象类定义的所有方法,并且返回一个组建好的对象。
- Director导演类 负责初始化成员变量,使用具体建造者进行建造。
- 注:其中产品类的特点是,同一个类成员变量不同则行为也有不同
三、优点
封装各个产品的生成逻辑,上层业务只关心需要获取哪个产品。
四、使用场景
- 同一个类的成员变量不同则行为也有不同,通过导演类来组装成员变量封装该类对象的创建。
五、与工厂模式的区别
工厂模式更关注的是将对象的生产全部委托给工厂类来实现,相当于生产对象全由工厂来完成。建造者模式更关注同一类对象的不同,其通过导演类来初始化成员变量,然后利用建造者类方法来获取返回对象。 如果把建造者模式换为工厂模式,则相当于取消导演角色,建造者自己初始化成员变量并注入到产品类返回即可,两者的区别在于建造者模式把注入成员变量和创建对象两个工作做了划分,创建对象由建造者完成,注入成员变量由导演类完成,便于统一管理。具体使用哪个,建议业务如果依赖产品到成员变量上面了的话则用建造者模式。