← 模式

建造者

12345678910111213141516171819202122232425262728293031323334353637383940414243#include <vector> class foo { public: class builder; foo(int prop1, bool prop2, bool prop3, std::vector<int> prop4) : prop1{prop1}, prop2{prop2}, prop3{prop3}, prop4{prop4} { } int prop1; bool prop2; bool prop3; std::vector<int> prop4; }; class foo::builder { public: builder& set_prop1(int value) { prop1 = value; return *this; }; builder& set_prop2(bool value) { prop2 = value; return *this; }; builder& set_prop3(bool value) { prop3 = value; return *this; }; builder& set_prop4(std::vector<int> value) { prop4 = value; return *this; }; foo build() const { return foo{prop1, prop2, prop3, prop4}; } private: int prop1 = 0; bool prop2 = false; bool prop3 = false; std::vector<int> prop4 = {}; }; int main() { foo f = foo::builder{}.set_prop1(5) .set_prop3(true) .build(); }

此模式采用 CC0 公共领域贡献 许可。

要求 c++98 或更新版本。

意图

将对象的复杂构造与其表示分离。

描述

foo 类(在第 3-16 行)有一个复杂的构造过程,在此过程中可以设置其属性的任何子集。此过程由 foo::builder 类(在第 18-36 行)捕获。此建造者类提供了一个构造 foo 对象的接口,允许提供各种参数组合。这避免了为 foo 定义大量构造函数。

foo::builder 类实现了一组可链式调用的函数来设置构造参数(第 21-24 行),以及一个 build 成员函数,用于使用这些参数构造 foo 对象(第 26-29 行)。

第 40-42 行,我们使用 foo::builder 构造一个 foo 对象,设置其 prop1prop3 成员,并调用 build 来构造对象。

贡献者

  • Joseph Mansfield

最后更新

2017年12月9日

来源

在 GitHub 上 Fork 此模式

分享