设计模式-建造者模式(Builder)
概要
记忆关键词:类和构造分离
定义:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
分析:原型模式就是从一个样板对象中复制出一个内部属性一致的对象。它是在内存中拷贝二进制流,比new一个对象的性能好很多。
建造者模式结构图如下:
一、能解决什么问题?
二、涉及的角色
1. Product(目标类)
最终要生成的对象
2. Builder(建造者的抽象基类)
承载了复杂对象的构建过程
3. ConcreteBuilder(具体的建造者)
依赖Product类,ConcreteBuilder跟Product属于组合关系,ConcreteBuilder属于整体类,Product属于部分类
4. Director
决定如何构建最终产品的算法
控制Builder的生产过程,Director跟Builder属于组合关系,Director属于整体类,Builder属于部分类
决定如何构建最终产品的算法. 其会包含一个负责组装的方法void Construct(Builder builder), 在这个方法中通过调用builder的方法,
就可以设置builder,等设置完成后,就可以通过builder的 getProduct() 方法获得最终的产品
## 2. 分析
1)当一个类的构造函数参数个数超过4个,而且这些参数有些是可选的参数,考虑使用构造者模式。
2)构建者模式的精髓是将复杂对象的构建过程封装到构建者里,使用构建者再去创建对象,即先有构建者后有产品,产品由构建者创建
总体来说,建造者模式适用于需要创建具有复杂结构或多个配置选项的对象,而且希望将构建过程与表示分离的情况。
## 3. 使用场景
在Java源码里,建造者模式最典型的体现就是StringBuilder
说明:StringBuilder是Java中的一个用于构建字符串的类,它允许在不创建新的对象的情况下,对字符串进行可变操作
注意:lombok中的@Builder 注解通过注入一个静态内部类作为建造者,简化了建造者模式的使用,减少了样板代码。这种方式在代码中使用起来更加简洁,并且提高了可读性。
## 4. 建造者模式与简单工厂模式的区别
区别在于建造者模式多出一个Builder类,使得创建对象的灵活性大大增加,适用于如下场景:
- 创建一个对象,多个同样的方法的调用顺序不同,产生的结果不同
- 创建一个对象,特别复杂,参数多,而且很多参数都有默认值
标签:Product,对象,Builder,建造,模式,构建,设计模式 From: https://www.cnblogs.com/hld123/p/18320754