在Java中有一个很好用的Builder模式实现方法。此处使用C++仿照Java的版本实现Builder模式。
在C++中内部类和外部类是没有直接关系的,不能通过内部类访问外部类的私有对象也不能通过外部类访问内部类的私有对象。所以此处使用friend关键字来增强内部类对于外部类的访问,主要是访问外部类的私有构造函数。代码如下:
#include <iostream> #include <memory> using namespace std; class BuilderDemo { public: class Builder { public: int servingSize; int servings; Builder(int servingSize, int servings) :servingSize(servingSize),servings(servings) { } shared_ptr<BuilderDemo> build() { return shared_ptr<BuilderDemo>(new BuilderDemo(*this)); } }; private: BuilderDemo(const Builder& builder) { servingSize = builder.servingSize; servings = builder.servings; } friend class Builder; private: int servingSize; int servings; }; int main() { BuilderDemo::Builder builder(4, 43); shared_ptr<BuilderDemo> demo = builder.build(); }
此处省略了外部类的部分成员变量,一般情况当外部类的成员变量个数在4个以上的时候可以使用Builder模式。