设计模式-建造者模式
什么是建造者模式?
建造者模式(Builder Pattern)是一种创建型设计模式,它将复杂对象的构建过程与其表示分离,使得同样的构建过程可以创建不同的表示。这种模式适合用于构建步骤繁多、配置项复杂的对象。
一、核心思想
- 将对象构建过程抽象为多个步骤,每个步骤由具体建造者实现。
- 通过指挥者(Director)协调建造步骤,客户端只需指定建造类型,无需关心具体构建过程。
- 分离构建和表示:同一构建过程可创建不同表示(如不同配置的产品)。
二、建造者模式的结构
- 产品(Product):要构建的复杂对象。
- 抽象建造者(Builder):定义构建产品各个部分的抽象接口。
- 具体建造者(ConcreteBuilder):实现抽象建造者接口,构建和装配产品的各个部分。
- 指挥者(Director):负责调用具体建造者按顺序构建产品。
- 客户端(Client):创建指挥者和具体建造者,启动构建过程。
建造者模式的优缺点
优点
- 构建过程解耦:将复杂对象的构建逻辑封装在建造者中,客户端无需了解细节。
- 分步构建:可控制构建步骤的顺序,灵活应对不同配置需求。
- 符合开闭原则:新增产品只需扩展建造者,无需修改现有代码。
- 避免构造函数膨胀:替代多参数构造函数,提高代码可读性。
缺点
- 类数量增加:需要创建多个建造者类和指挥者类,增加代码复杂度。
- 适用范围有限:仅适用于构建过程稳定的对象,若构建步骤频繁变化则不适用。
- 指挥者职责过重:若构建步骤复杂,指挥者类可能变得庞大。
什么场景下使用建造者模式
- 对象构建步骤复杂
- 参数配置较多
- 确保对象构建过程的顺序性
代码举例
常用的OkHttp就是建造者模式,比如easyExcel也是建造者模式,下边就以easyExcel举例
public class ExcelFileReadTest {
public static void main(String[] args) throws IOException {
RowReadListener<ReadTestEntity> rowReadListener = new RowReadListener<>();
ExcelReaderSheetBuilder excelReaderSheetBuilder = EasyExcel.read(
new FileSystemResource("excelFileTest.xlsx").getInputStream(),
rowReadListener
).useDefaultListener(false)
.charset(Charset.defaultCharset())
.sheet(0)
.headRowNumber(0);
excelReaderSheetBuilder.doRead();
}
public static class RowReadListener<T> implements ReadListener<Map<Integer, ReadCellData<T>>> {
public RowReadListener(RowProcessor processor){
this.processor = processor;
}
@Override
public void invoke(Map<Integer, ReadCellData<T>> rowData, AnalysisContext analysisContext) {
}
@Override
public void doAfterAllAnalysed(AnalysisContext analysisContext) {
}
}
}