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