同步操作将从 hqgboy/design-patterns-cpp 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
/** C++ Design Patterns: Builder* Author: Jakub Vojvoda [github.com/JakubVojvoda]* 2016** Source code is licensed under MIT License* (for more details see LICENSE)**/#include <iostream>#include <string>/** Product* the final object that will be created using Builder*/class Product{public:void makeA( const std::string &part ){partA = part;}void makeB( const std::string &part ){partB = part;}void makeC( const std::string &part ){partC = part;}std::string get(){return (partA + " " + partB + " " + partC);}// ...private:std::string partA;std::string partB;std::string partC;// ...};/** Builder* abstract interface for creating products*/class Builder{public:virtual ~Builder() {}Product get(){return product;}virtual void buildPartA() = 0;virtual void buildPartB() = 0;virtual void buildPartC() = 0;// ...protected:Product product;};/** Concrete Builder X and Y* create real products and stores them in the composite structure*/class ConcreteBuilderX : public Builder{public:void buildPartA(){product.makeA( "A-X" );}void buildPartB(){product.makeB( "B-X" );}void buildPartC(){product.makeC( "C-X" );}// ...};class ConcreteBuilderY : public Builder{public:void buildPartA(){product.makeA( "A-Y" );}void buildPartB(){product.makeB( "B-Y" );}void buildPartC(){product.makeC( "C-Y" );}// ...};/** Director* responsible for managing the correct sequence of object creation*/class Director {public:Director() : builder() {}~Director(){if ( builder ){delete builder;}}void set( Builder *b ){if ( builder ){delete builder;}builder = b;}Product get(){return builder->get();}void construct(){builder->buildPartA();builder->buildPartB();builder->buildPartC();// ...}// ...private:Builder *builder;};int main(){Director director;director.set( new ConcreteBuilderX );director.construct();Product product1 = director.get();std::cout << "1st product parts: " << product1.get() << std::endl;director.set( new ConcreteBuilderY );director.construct();Product product2 = director.get();std::cout << "2nd product parts: " << product2.get() << std::endl;return 0;}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。