什么是建造模式
建造者模式(Builder Pattern)是一种创建型设计模式,其核心思想是将复杂对象的构建过程与其表示方式分离,使得相同的构建过程可以创建不同的表示。这种模式通过分步步骤构建对象,使客户端能够灵活控制构建的细节,同时隐藏复杂的内部实现。
建造者模式核心概念
产品:被构建的复杂对象,通常由多个部件组成;例如,一台电脑、一个套餐、一份报告等。
抽象构建者:定义构建产品的抽象接口,包括构建各个部件的方法以及返回最终产品的getResult()方法。
具体构造者:实现抽象构建者的接口,负责具体构建产品的各个部件,并记录构建过程中的状态,最终返回完整的产品实例。
指挥者:调用构建者的方法,按特定顺序和规则构建产品;指挥者不直接涉及产品细节,只关注构建流程。
建造者模式工作原理
分步骤构建:构建者模式将复杂对象的创建过程分解为多个简单的步骤,如添加部件A、配件部件B;每个步骤由具体构建者实现。
解耦构建与表示:构建逻辑与最终产品的表示方式分离;例如:同一个构建流程可以生产不同格式的文档。
灵活控制:客户端可以选择不同的具体构建者或指挥者,以定制不同配置的产品。
构建者模式应用场景
复杂对象的组装:例如:汽车装配,不同配置的车型、电脑硬件组合、房屋建造等;当对象的构建步骤复杂且依赖关系多时,如先安装硬件再运行软件。
参数配置复杂:对象有大量可选参数或默认值,使用构造函数会导致参数列表冗长。
不同表示的需求:需要通过相同构建流程生成不同配置的产品,如生成不同套餐的汉堡组合。
链式调用:支持链式调用的API设计,如java的StringBuilder、SQL查询构建器。
为什么使用建造者模式
解耦构建与表示:构建逻辑与产品表示独立,便于扩展和维护。
灵活控制构建过程:可以分步骤构建对象,控制构建顺序和细节。
代码复用性高:相同的构建者可被多个指挥者复用,减少重复代码。
支持链式调用:通过链式方法调用,提高代码可读性。
建造者模式的限制
类数量增加:需要定义多个建造者类和指挥者类,可能增加系统复杂度。
维护成本较高:如果产品内部结构频繁变化,可能需要频繁修改建造者接口。
使用范围有限:仅使用于构建过程稳定的场景,若构建步骤经常变化,则不适合。
建造者模式使用场景
快餐店套餐组合:
产品:套餐(汉堡、可乐、薯条、炸鸡)
抽象建造者:套餐建造接口。
具体构造者:素食套餐建造者、鸡肉套餐建造者。
指挥者:收银员,按顾客需求组合套餐。
java中的StringBuilder
通过链式调用逐步构建字符串
示例代码
StringBuilder builder = new StringBuilder();
builder.append("Hello").append(" ").append("World");
String result = builder.toString();
文档生成系统
产品:报告(文本、图表、表格)
抽象构造者:文档生成器
具体构建者:PDF生成器、HTML生成器
指挥者:文档处理器,按格式生成报告
总之,构造者模式通过分步骤构建和解耦表示,解决了复杂对象创建过程中参数混乱、步骤依赖等问题,它特别适合需要灵活配置、多步骤构建或多种表示形式的场景,但需权衡类数量增加和维护成本。
4569

被折叠的 条评论
为什么被折叠?



