建造者模式

59 阅读2分钟

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第7天,点击查看活动详情

建造者模式

建造者模式(Builder Pattern)使用多个简单的对象一步一步构建成一个复杂的对象。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。

一个 Builder 类会一步一步构造最终的对象。该 Builder 类是独立于其他对象的。

主要解决在软件系统中,有时候面临着"一个复杂对象"的创建工作,其通常由各个部分的子对象用一定的算法构成;由于需求的变化,这个复杂对象的各个部分经常面临着剧烈的变化,但是将它们组合在一起的算法却相对稳定。

常用的 JAVA 中的 StringBuilder。

与工厂模式的区别是

工厂模式直接创建好产品,不需关注创建的过程。建造者模式更加关注与零件装配的顺序装配内容。

工厂模式如去咖啡店买一杯咖啡,点一杯拿铁,服务员按照工厂工序制作一杯拿铁。

构建模式好比自己只做一杯咖啡,用多少咖啡,放多少奶,加多少糖可以自由控制构建的数据,更灵活多变。

swagger中构建docket对象也是build.

public Docket defaultApi () {
    return new Docket(DocumentationType.SWAGGER_2)
        .apiInfo(apiInfo())
        .select()
        .apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class))
        .apis(RequestHandlerSelectors.basePackage("com.xx"))
        .paths(PathSelectors.any())
        .build();
  }

Lombok

@Builder`注解开启对象构建方法。

@Builder
public class Student {
  private int stuStatus = 1;
}
​
//使用
Student student = Student.builder().stuStatus(2).build();
​

springboot 中的builder

示例SpringApplicationBuilder

public class SpringApplicationBuilder {
​
  private final SpringApplication application;
  
  public SpringApplicationBuilder child(Class<?>... sources) {}
  }

使用Builder

new SpringApplicationBuilder()
        .sources(Parent.class)
        .child(Application.class)
        .bannerMode(Banner.Mode.OFF)
        .run(args);

它是新增了一个 XxxBuilder 类:SpringApplicationBuilder,然后在 SpringApplicationBuilder 中新增了个 SpringApplication 的成员变量,然后再新增变量对应的方法。

总结:

构建模式通过生成一个Builder类内置了构建对象,通过链式调用简化了代码,省去了重复的对象调用。