← 模式
建造者
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
对象,设置其 prop1
和 prop3
成员,并调用 build
来构造对象。