模式生成器

Builder 模式属于一组模式,其存在对我来说不是特别清楚,我注意到它明显的冗余。属于生成设计模式组。用于实现创建复杂对象的简单接口。

适用性

接口的简化。可以更方便地在带有大量参数的构造函数中创建对象,客观上提高了代码的可读性。

不带构建器的 C++ 示例:

auto weapon = new Weapon(“Claws”);
monster->weapon = weapon;
auto health = new MonsterHealth(100);
monster->health = health;

Пример со строителем на C++:

                  .addWeapon(“Claws”)
                  .addHealth(100)
                  .build();

Однако в языках поддерживающих именованные аргументы (named arguments), необходимость использовать именно для этого случая отпадает.

Пример на Swift с использованием named arguments:

let monster = Monster(weapon: “Claws”, health: 100)

不变性。使用构建器,您可以确保创建的对象的封装,直到最终组装阶段。在这里,您需要仔细考虑使用模式是否能让您摆脱工作环境的高度动态性,也许使用模式不会带来任何好处,因为开发团队中缺乏使用封装的文化; .

在对象创建的不同阶段与组件交互。同样使用该模式,可以确保在与系统的其他组件交互时逐步创建对象。这很可能非常有用(?)

批评

当然,您需要“仔细”考虑是否值得在您的项目中广泛使用该模式。具有现代语法和高级 IDE 的语言在提高代码可读性方面消除了使用生成器的需要(请参阅有关命名参数的要点)
1994 年 GoF 书出版时是否应该使用这种模式?很可能是的,但是,从那些年的开源代码库来看,很少有人使用它。

来源

https://refactoring.guru/ru/design-patterns/builder

Leave a Comment

Your email address will not be published. Required fields are marked *