跟着GPT学设计模式之建造者模式

Builder 模式,中文翻译为建造者模式或者构建者模式,也有人叫它生成器模式。允许你创建不同口味的对象同时避免构造器污染。当一个对象可能有几种口味,或者一个对象的创建涉及到很多步骤时会很有用。

现实世界例子:想象一个角色扮演游戏的角色生成器。最简单的选择是让计算机为你创建角色。但是如果你想选择一些像专业,性别,发色等角色细节时,这个角色生成就变成了一个渐进的过程。当所有选择完成时,该过程也将完成。

通过构造器、set函数创建对象没有建造者模式灵活,也就是建造者具有这三个特性:依赖关系(Dependencies)、合法校验(Preconditions)、不可变(Immutable)。

建造者模式的优点包括:

  • 分离构建和表示:通过建造者模式,将一个复杂对象的构建过程与其表示相分离,使得同样的构建过程可以创建不同的表示形式。
  • 更好的封装性和扩展性:可以将构建过程中的每个步骤封装在具体的建造者中,使得对于产品的构建过程进行更加精细的控制和管理。
  • 避免构造函数参数过多:通过使用建造者模式,可以避免通过构造函数参数传递大量的可选参数,使得构造函数的定义更加简洁明了。

建造者模式适用于需要创建复杂对象且对象的构建过程比较稳定的情况。如果对象的构建过程非常简单或者对象的表示形式只有一种,可能并不适合使用建造者模式。在实际应用中,可以根据具体需求和设计的复杂程度来选择是否使用建造者模式。

建造者模式的实现

说明

建造者模式(Builder Pattern)可以将一个复杂对象的构建过程与其表示相分离,使得同样的构建过程可以创建不同的表示。

在软件开发中,有时候需要创建一个复杂的对象,该对象可能由多个部分组成,且创建过程较为复杂。使用简单的构造函数或者静态工厂方法来创建对象可能会导致构造函数参数过多或者构造方法变得冗长复杂,不易于维护和扩展。这时,可以使用建造者模式来解决这个问题。

编程示例

有一个英雄要创建。

java 复制代码
public final class Hero {
  private final Profession profession;
  private final String name;
  private final HairType hairType;
  private final HairColor hairColor;
  private final Armor armor;
  private final Weapon weapon;

  private Hero(Builder builder) {
    this.profession = builder.profession;
    this.name = builder.name;
    this.hairColor = builder.hairColor;
    this.hairType = builder.hairType;
    this.weapon = builder.weapon;
    this.armor = builder.armor;
  }
}

有创建者:

java 复制代码
  public static class Builder {
    private final Profession profession;
    private final String name;
    private HairType hairType;
    private HairColor hairColor;
    private Armor armor;
    private Weapon weapon;

    public Builder(Profession profession, String name) {
      // 可以进行校验参数
      if (profession == null || name == null) {
        throw new IllegalArgumentException("profession and name can not be null");
      }
      this.profession = profession;
      this.name = name;
    }

    public Builder withHairType(HairType hairType) {
      this.hairType = hairType;
      return this;
    }

    public Builder withHairColor(HairColor hairColor) {
      this.hairColor = hairColor;
      return this;
    }

    public Builder withArmor(Armor armor) {
      this.armor = armor;
      return this;
    }

    public Builder withWeapon(Weapon weapon) {
      this.weapon = weapon;
      return this;
    }

    public Hero build() {
      return new Hero(this);
    }
  }

使用:

java 复制代码
var mage = new Hero.Builder(Profession.MAGE, "Riobard").withHairColor(HairColor.BLACK).withWeapon(Weapon.DAGGER).build();

对比构造器创建:

java 复制代码
public Hero(Profession profession, String name, HairType hairType, HairColor hairColor, Armor armor, Weapon weapon) {

}

以上内容基于GPT创建和整理。

参考

相关推荐
YH552698421 小时前
ChatGPT里的GPT-5.6怎么选?
人工智能·gpt·chatgpt
人工智能培训1 天前
中小企业低成本落地AI工具实操方案
大数据·人工智能·gpt·机器学习·agi
王莹月1 天前
文生图接口的提示词写多长合适?nano banana pro / gpt-image-2 实测长度与负面词
gpt·ai·chatgpt·ai作画·aigc·agi
执明wa1 天前
Android 开发中的设计模式入门:六大设计原则
android·设计模式
莫得感情 o1 天前
设计模式 09 · 适配器模式
设计模式·适配器模式
半亩码田2 天前
AI周报 | DeepSeek-V4-Flash 正式版(7-31)、Wan2.6 全链路、GPT-5.6 降价 80%(上周 07.27-08.02)
人工智能·gpt
梦想的颜色2 天前
2026 硬核横评:DeepSeek‑V4‑Flash VS OpenAI Codex (GPT‑5.6‑Codex) 代码模型全方位对比
gpt·codex·deepseek·ai 代码大模型·大模型 api 选型
梅头脑2 天前
学了6种设计模式却写出了同事看不懂的代码——SOLID五原则反例对照,治好了我的"过度设计"
设计模式
RAOY的AI笔记2 天前
# ChatGPT Plus 辅助分析 Python 异常堆栈:从日志脱敏到回归测试
gpt·chatgpt
workflower2 天前
案例:大模型驱动的“发现- 研判- 整改- 验证”全闭环治理体系
人工智能·深度学习·机器学习·设计模式·机器人