建造者模式(Builder Pattern)
一、概念
建造者模式(Builder Pattern)也叫 “生成器模式”,”对象构建时非常复杂,且有很多步骤需要处理时,可以使用多个简单的对象一步一步组装成这个复杂对象
。
建造模式的本质:
- 分离了对象子组件的
单独构造
(由Builder来负责)和装配
(由Director负责)。 从而可以构造出复杂的对象。这个模式适用于:某个对象的构建过程复杂的情况下使用
。 - 由于实现了
构建和装配的解耦
。不同的构建器,相同的装配
,也可以做出不同的对象;相同的构建器,不同的装配顺序
也可以做出不同的对象。也就是实现了构建逻辑、装配逻辑的解耦,实现了更好的复用
二、参与者
- 产品(Product):表示被构造的复杂对象
- 抽象建造者(Builder):建造者的抽象类,规范产品对象的各个组成部分的建造,一般由子类实现具体建造过程。创造Product各个部件的抽象接口
- 具体建造者(ConcreteBuilder):具体的建造者,根据不同的业务逻辑,具体到各个对象的各个组成部分的建造。创造Product各个部件的具体实现接口
- 建造指挥者(Director):调用具体的建造者来创建各个对象的各个部分,然后根据不同组合封装起一个个方法供外界调用。该类引导Builder来实现一个产品构造的成体流程
三、代码例子
指导者 指导 造 BMW的引擎、变速箱、底盘
指导者 指导 造 BenZ的Engine、GearBox、Chassis
产品(Product):BMWCar、BenzCar(Car)
抽象建造者(Builder):CarBuilder(BuildCar、BuildEngine、BuildGearBox、BuildChassis)
具体建造者(ConcreteBuilder):BMWCarBuilder 和 BenzCarBuilder (建造 BuildCar、BuildEngine、BuildGearBox、BuildChassis)
建造指挥者(Director):CarDirector (调用 BuildCar、BuildEngine、BuildGearBox、BuildChassis)
四、UML图
五、核心思想
- 将复杂对象的创建过程(比如设置属性值),交给
构建者Builder去做
。 - 最后通过构建者的
构建方法build()
,真正去创建对象。 - 构建方法里调用
需要实例化的类的构造函数
,并将构建者的属性值复制给该对象。复制前
可以做一些参数校验
和默认值赋值
等操作。
六、优缺点
(一)优点
- 封装性好,创建和使用分离
- 扩展性好,建造类之间独立,一定程度上实现了解耦
(二)缺点
- 产生多余的Builder对象
- 产品内部发生变化时,建造者都需要修改,成本较大
七、建造者模式和工厂模式区别
- 建造者模式根据
不同的产品零件和顺序
可以创造出不同的产品
,而工厂模式创建出来的产品都是一样的
- 构建者模式是用来创建一种类型的复杂对象,通过设置不同的可选参数,“定制化”创建不同的对象。
- 建造者模式使用者需要知道这个产品有哪些零件组成,而工厂模式的使用者不需要知道,
直接创建
就行 - 工厂模式是用来创建
不同但是相关类型的对象(继承同一父类或者接口的一组子类)
,由给定的参数来决定创建哪种类型的对象,一般这个创建过程也比较简单,如果复杂的话,可以工厂模式和构建者模式结合。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全网最简单!3分钟用满血DeepSeek R1开发一款AI智能客服,零代码轻松接入微信、公众号、小程
· .NET 10 首个预览版发布,跨平台开发与性能全面提升
· 《HelloGitHub》第 107 期
· 全程使用 AI 从 0 到 1 写了个小工具
· 从文本到图像:SSE 如何助力 AI 内容实时呈现?(Typescript篇)