大家好,我是程序喵是的,我又来了!构建器模式用于构造复杂对象。重点在于逐步构建对象。就像俄罗斯娃娃一样,娃娃必须逐步设置才能成功。如果提供了多个不同大小的玩偶,则它们的嵌套方式和顺序应以嵌套的方式进行,繁琐的嵌套玩偶操作可以移交给中介机构。这是构建者模型,也就是说,外部仅需要提供产品所需的各种零件,然后将这些零件提供给构建者。导体将指导建造者逐步组装产品,而外界无需知道具体的建造细节。直接获取产品。 #include& lt; array& gt; #include& lt; iostream& gt; class Product {public:void SetFirst(int value){this-& gt; first_ = value; flag_ [0] = true;} void SetSecond(int value){if(!flag_ [0])return; this-> second_ =值; flag_ [1] = true;} void SetThird(int value){if(!flag_ [0] ||!flag_ [1])返回; this-> third_ =值; flag_ [2] = true;} bool IsOk(){返回flag_ [0]&& amp; flag_ [1]&& amp; flag_ [2];} private:std :: array& lt; bool,3& gt;旗帜_; int first_; int second_; int third_;};类AbstractBuilder {public:AbstractBuilder(){} virtual〜AbstractBuilder(){} virtual void BuildFirst()= 0;虚拟void BuildSecond()= 0;虚拟void BuildThird()= 0;虚拟产品* GetProduct()= 0;};类ConcreteBuilder:公共AbstractBuilder {public:ConcreteBuilder(){this-& gt; product_ = new Product();}〜ConcreteBuilder(){删除this-& gt_product_ ;} void BuildFirst(){this-& gt; product _-& gt; SetFirst(1);} void BuildSecond(){this-& product __& gt; SetSecond(2);} void Build Third(){this-& gt_product _-& gtSetThird(3);} Product * GetProduct(){返回this-& gt; product_;}私有:Product * product_;};类主管{public :Director(AbstractBuilder * builder){this-& gt; builder_ = builder;}〜Director(){} Product * Construct(){this-& gt; builder _-& gt; BuildFirst(); this-& builder _-& BuildSecond(); this-& gt; builder _-& gt; BuildThird();返回this-& gt; builder _-& gt; GetProduct();}私有:AbstractBuilder * builder _;}; int main(){AbstractBuilder * builder = new ConcreteBuilder();导演*导演=新导演(建造者);产品*产品= Director-& gt; Construct(); std :: cout& lt;& lt;产品-IsOk()<<< std :: endl; return 0;}您可以看到引入了Director的代码,作为指挥,它隔离了产品创建过程,而另一方面控制了产品创建步骤。外部只需要知道特定构建器的类型,导体就可以调用构建器的相应方法来构建,并且外部可以获取完整的产品对象。建造者模式不仅使产品创建过程脱钩,而且每个具体的建造者都是相对独立的。通过将不同的混凝土建造者传递给导体,您可以获得不同的产品对象,并且通过添加不同的混凝土建造者,您可以获得不同的产品对象。可以得到更多的产品对象,符合打开和关闭的原则。在构建器模式下创建的产品通常在创建步骤上相似。如果产品之间差异很大,则不适合使用构建器模式。是的,今天的文章太短了