生成器设计模式(Builder Design Pattern)[论点:概念、图示、示例、框架中的应用、场景]

这篇具有很好参考价值的文章主要介绍了生成器设计模式(Builder Design Pattern)[论点:概念、图示、示例、框架中的应用、场景]。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

概念

        生成器设计模式(Builder Design Pattern)是一种创建型设计模式,用于处理具有多个属性和复杂构造过程的对象。生成器模式通过将对象的构建过程与其表示分离,使得相同的构建过程可以创建不同的表示。这有助于减少构造函数的参数个数,提高代码的可读性和可维护性。

生成器模式的核心组件包括:

  1. 产品(Product):需要创建的复杂对象。
  2. 抽象生成器(Builder):定义用于创建产品对象各个部分的接口。
  3. 具体生成器(Concrete Builder):实现抽象生成器接口,负责创建和组装产品的各个部分。
  4. 指挥者(Director):负责构建产品的过程,通常接受一个生成器对象作为参数,并使用该对象的方法来组装产品。

相关图示

图片来自:https://refactoringguru.cn/design-patterns/builder
生成器设计模式(Builder Design Pattern)[论点:概念、图示、示例、框架中的应用、场景]

代码示例

// 产品
class House {
    private String foundation;
    private String structure;
    private String roof;

    public void setFoundation(String foundation) {
        this.foundation = foundation;
    }

    public void setStructure(String structure) {
        this.structure = structure;
    }

    public void setRoof(String roof) {
        this.roof = roof;
    }

    public String toString() {
        return "Foundation: " + foundation + ", Structure: " + structure + ", Roof: " + roof;
    }
}

// 抽象生成器
interface HouseBuilder {
    void buildFoundation();

    void buildStructure();

    void buildRoof();

    House getHouse();
}

// 具体生成器
class ConcreteHouseBuilder implements HouseBuilder {
    private House house;

    public ConcreteHouseBuilder() {
        house = new House();
    }

    @Override
    public void buildFoundation() {
        house.setFoundation("Concrete Foundation");
    }

    @Override
    public void buildStructure() {
        house.setStructure("Concrete Structure");
    }

    @Override
    public void buildRoof() {
        house.setRoof("Concrete Roof");
    }

    @Override
    public House getHouse() {
        return house;
    }
}

// 指挥者
class HouseDirector {
    public House constructHouse(HouseBuilder builder) {
        builder.buildFoundation();
        builder.buildStructure();
        builder.buildRoof();
        return builder.getHouse();
    }
}

// 客户端
public class BuilderPatternDemo {
    public static void main(String[] args) {
        HouseBuilder builder = new ConcreteHouseBuilder();
        HouseDirector director = new HouseDirector();
        House house = director.constructHouse(builder);
        System.out.println(house);
    }
}

框架中的应用

        Spring Boot中的生成器设计模式的一个很好的例子是org.springframework.boot.web.client.RestTemplateBuilder。这个生成器类可以帮助创建和配置RestTemplate实例。使用RestTemplateBuilder可以简化和优化RestTemplate的创建过程,尤其是当有多个配置选项时。

public class RestTemplateBuilder {
	//下面展示部分相关代码
    private Duration connectTimeout;
    private Duration readTimeout;
    private ClientHttpRequestFactory requestFactory;

    public RestTemplateBuilder() {
    }

    public RestTemplateBuilder connectTimeout(Duration connectTimeout) {
        this.connectTimeout = connectTimeout;
        return this;
    }

    public RestTemplateBuilder readTimeout(Duration readTimeout) {
        this.readTimeout = readTimeout;
        return this;
    }

    public RestTemplateBuilder requestFactory(ClientHttpRequestFactory requestFactory) {
        this.requestFactory = requestFactory;
        return this;
    }

    public RestTemplate build() {
        SimpleClientHttpRequestFactory requestFactory = this.requestFactory == null ? new SimpleClientHttpRequestFactory() : (SimpleClientHttpRequestFactory) this.requestFactory;
        
        if (this.connectTimeout != null) {
            requestFactory.setConnectTimeout((int) this.connectTimeout.toMillis());
        }
        if (this.readTimeout != null) {
            requestFactory.setReadTimeout((int) this.readTimeout.toMillis());
        }

        return new RestTemplate(requestFactory);
    }
}


场景

生成器设计模式在不同场景下可能有不同的应用方式。以下是两种典型的场景

多个生成器(Concrete Builder):

        当需要为同一产品(Product)提供不同的表示形式或构建过程时,可以使用多个生成器。每个生成器负责创建并组装产品的各个部分,但可能采用不同的配置、数据源或构建方法。

        例如,假设有一个Report类,它需要根据不同的数据源(如CSV文件、数据库等)以及不同的格式(如HTML、PDF等)生成报告。在这种情况下,可以创建多个生成器,每个生成器负责从特定的数据源中读取数据并生成特定格式的报告。

interface ReportBuilder {
    void loadDataSource();
    void buildHeader();
    void buildContent();
    void buildFooter();
    Report getReport();
}

class CSVToHtmlReportBuilder implements ReportBuilder {
    // ...实现里面对应的方法
}

class DatabaseToPdfReportBuilder implements ReportBuilder {
    // ...实现里面对应的方法
}


单个生成器

        当一个复杂对象的变化仅仅是属性值的变化,而不涉及到整体结构的变化时,只需要一个生成者。在这种情况下,生成者可以通过扩展属性和填充属性的方法来创建具有不同属性值的复杂对象。

        例如,假设我们正在构建一个汽车制造系统,系统可以生产不同颜色、轮胎类型和发动机类型的汽车。在这种情况下,我们可以使用一个汽车生成者,并通过提供不同的颜色、轮胎类型和发动机类型来创建具有不同属性的汽车。文章来源地址https://www.toymoban.com/news/detail-410797.html

public class Car {
    private String color;
    private String tireType;
    private String engineType;

    public void setColor(String color) {
        this.color = color;
    }

    public void setTireType(String tireType) {
        this.tireType = tireType;
    }

    public void setEngineType(String engineType) {
        this.engineType = engineType;
    }

    @Override
    public String toString() {
        return "Car{" +
                "color='" + color + '\'' +
                ", tireType='" + tireType + '\'' +
                ", engineType='" + engineType + '\'' +
                '}';
    }
}

public class CarBuilder {
    private Car car;

    public CarBuilder() {
        car = new Car();
    }

    public CarBuilder setColor(String color) {
        car.setColor(color);
        return this;
    }

    public CarBuilder setTireType(String tireType) {
        car.setTireType(tireType);
        return this;
    }

    public CarBuilder setEngineType(String engineType) {
        car.setEngineType(engineType);
        return this;
    }

    public Car build() {
        return car;
    }
}

public class Main {
    public static void main(String[] args) {
        CarBuilder carBuilder = new CarBuilder();

        Car sportsCar = carBuilder.setColor("Red")
                                   .setTireType("Sports")
                                   .setEngineType("V8")
                                   .build();

        Car familyCar = carBuilder.setColor("Blue")
                                   .setTireType("Standard")
                                   .setEngineType("V6")
                                   .build();

        System.out.println(sportsCar);
        System.out.println(familyCar);
    }
}


到了这里,关于生成器设计模式(Builder Design Pattern)[论点:概念、图示、示例、框架中的应用、场景]的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 建造者模式(生成器模式)

    依赖倒转原则 = 抽象不应该依赖细节,细节应该依赖于抽象 对流程进行抽象,流程中具体细节依赖于这个抽象 过程是稳定的,细节是不同的 建造者模式(Builder),将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示 建造者模式解析 Director:指挥者,是

    2024年04月15日
    浏览(36)
  • [go] 生成器模式

    生成器模式建议将对象构造代码从产品类中抽取出来, 并将其放在一个名为生成器的独立对象中。 生成器 (Builder) 接口声明在所有类型生成器中通用的产品构造步骤。 具体生成器 (Concrete Builders) 提供构造过程的不同实现。 具体生成器也可以构造不遵循通用接口的产品

    2024年01月24日
    浏览(42)
  • 序列号及序列号生成器(号段模式,数据库模式)详细介绍(建议收藏)

    现如今,数据的唯一性和可追溯性变得越来越重要。从简单的数据库主键到复杂的分布式系统,唯一标识符在各种场景中都发挥着关键作用。序列号,作为一种广泛应用的唯一标识符,为我们提供了确保数据完整性和一致性的基础。在这个背景下,高效、可靠的序列号生成器

    2024年02月03日
    浏览(74)
  • 设计模式-构建者(Builder)模式详解

    在创建一个对象的时候,你是否是酱紫写: 上面的写法虽然效率高,但也有一些不足,对于代码后期维护和协同开发会是一件很痛苦的事情。 再看看别人是酱紫写的:  是不是很优雅,而且在很多框架中也能看到这样写的身影。没错这就是接下来要讲的构建者模式,这样好处

    2024年02月11日
    浏览(49)
  • 设计模式--建造者模式(Builder Pattern)

    建造者模式(Builder Pattern)是一种创建型设计模式,它关注如何按照一定的步骤和规则创建复杂对象。建造者模式的主要目的是将一个复杂对象的构建过程与其表示分离,从而使同样的构建过程可以创建不同的表示。 在建造者模式中,通常有以下几个核心角色: 产品(Prod

    2024年02月11日
    浏览(38)
  • 设计模式——建造者模式(Builder Pattern)

    概述        建造者模式是较为复杂的创建型模式,它将客户端与包含多个组成部分(或部件)的复杂对象的创建过程分离,客户端无须知道复杂对象的内部组成部分与装配方式,只需要知道所需建造者的类型即可。它关注如何一步一步创建一个的复杂对象,不同的具体建

    2024年01月20日
    浏览(48)
  • 设计模式|建造者模式(Builder Pattern)

    建造者模式(Builder Pattern)是一种创建型设计模式,用于将一个复杂对象的构建过程与其表示分离,以便可以使用相同的构建过程创建不同的表示。 Builder(建造者)接口或抽象类 : 定义了构建对象的各个步骤的方法。 ConcreteBuilder(具体建造者)类 : 实现了 Builder 接口或继

    2024年04月15日
    浏览(56)
  • 『造轮子』亿级短URL生成器的架构设计及源码分享

    📣读完这篇文章里你能收获到 了解博主的短链生成的架构设计思路 学习不同的短链技术方案选择 学习基于混淆的自增短URL算法 了解博主造的轮子SuperShortLink短链开源项目 感谢点赞+收藏,避免下次找不到~ 短 URL 生成器,也称作 短链接生成器 ,就是将一个比较长的 URL 生成

    2024年02月03日
    浏览(89)
  • 设计模式五:建造者模式(Builder Pattern)

    建造者模式(Builder Pattern)是一种创建型设计模式,用于通过一系列步骤来构建复杂对象。它将对象的构建过程与其表示分离,从而允许相同的构建过程可以创建不同的表示。 建造者模式中的几个角色: 产品(Product):表示被构建的复杂对象。 抽象建造者(Builder):定义了构建复

    2024年02月15日
    浏览(39)
  • 【Java设计模式】建造者模式 & 注解@Builder

    将一个复杂对象的构造与它的表示分离 ,使同样的构建过程可以创建不同的表示。它使将一个复杂的对象分解成多个简单的对象,然后一步步构建而成。 每一个具体建造者都相对独立,而与其它的具体建造者无关,因此可以很方便地替换具体建造者或增加新的具体建造者,

    2024年02月14日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包