设计模式-建造者模式

什么是建造者模式?

建造者模式(Builder Pattern)是一种创建型设计模式,它将复杂对象的构建过程与其表示分离,使得同样的构建过程可以创建不同的表示。这种模式适合用于构建步骤繁多、配置项复杂的对象。

一、核心思想

  • 将对象构建过程抽象为多个步骤,每个步骤由具体建造者实现。
  • 通过指挥者(Director)协调建造步骤,客户端只需指定建造类型,无需关心具体构建过程。
  • 分离构建和表示:同一构建过程可创建不同表示(如不同配置的产品)。

二、建造者模式的结构

  1. 产品(Product):要构建的复杂对象。
  2. 抽象建造者(Builder):定义构建产品各个部分的抽象接口。
  3. 具体建造者(ConcreteBuilder):实现抽象建造者接口,构建和装配产品的各个部分。
  4. 指挥者(Director):负责调用具体建造者按顺序构建产品。
  5. 客户端(Client):创建指挥者和具体建造者,启动构建过程。

建造者模式的优缺点

优点

  1. 构建过程解耦:将复杂对象的构建逻辑封装在建造者中,客户端无需了解细节。
  2. 分步构建:可控制构建步骤的顺序,灵活应对不同配置需求。
  3. 符合开闭原则:新增产品只需扩展建造者,无需修改现有代码。
  4. 避免构造函数膨胀:替代多参数构造函数,提高代码可读性。

缺点

  1. 类数量增加:需要创建多个建造者类和指挥者类,增加代码复杂度。
  2. 适用范围有限:仅适用于构建过程稳定的对象,若构建步骤频繁变化则不适用。
  3. 指挥者职责过重:若构建步骤复杂,指挥者类可能变得庞大。

什么场景下使用建造者模式

  1. 对象构建步骤复杂
  2. 参数配置较多
  3. 确保对象构建过程的顺序性

代码举例

常用的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) {

        }
    }
}
posted @ 2025-06-22 02:58  MaC-Matthew  阅读(9)  评论(0)    收藏  举报