C++ 04 建造者模式

  1. 说明

    • 建造者模式

      • 由若干零件拼凑成了一辆车。
      • 车就是最终得产物,零件则就是基本元素。
    • 核心

      • 零件组装,即组装厂。
    • 好处

      • 同样的一堆零件,可以组成若干种产品。
  2. 案例

    • 书接上回

      • 鞋贩子规模扩大,想在进店门口摆放一个吉祥物。
      • 而且吉祥物需要用乐高完成。
      • 那么乐高小零件就是最小基本元素,而最终拼凑的吉祥物就是产物。
    • 代码

      #include<iostream>
      #include<vector>
      #include<string>
      
      
      class LeGao {
      public:
       virtual void Action() = 0;
      };
      
      class Tou : public LeGao {
      public:
       void Action() override {
         std::cout << "an shang yi ge tou!" << std::endl;
       }
      };
      
      class ShenTi : public LeGao {
      public:
       void Action() override {
         std::cout << "an shang shen zi!" << std::endl;
       }
      };
      
      class Tui : public LeGao {
      public:
       void Action() override {
         std::cout << "an shang yi tiao tui!" << std::endl;
       }
      };
      
      
      class JiXiangWu {
      public:
       void PinJie(LeGao * ling_jian) {
         cheng_pin.emplace_back(ling_jian);
       }
       void ZenMeZhuangDe() {
         for(const auto& le_gao:cheng_pin) {
           le_gao->Action();
         }
       }
      private:
       std::vector<LeGao*> cheng_pin;
      };
      
      class Builder {
      public:
       JiXiangWu DanTouLang() {
         JiXiangWu lang;
         lang.PinJie(new Tou());
         lang.PinJie(new ShenTi());
         lang.PinJie(new Tui());
         lang.PinJie(new Tui());
         lang.PinJie(new Tui());
         lang.PinJie(new Tui());
         return lang;
       }
       JiXiangWu ShuangTouLang() {
         JiXiangWu lang;
         lang.PinJie(new Tou());
         lang.PinJie(new Tou());
         lang.PinJie(new ShenTi());
         lang.PinJie(new Tui());
         lang.PinJie(new Tui());
         lang.PinJie(new Tui());
         lang.PinJie(new Tui());
         return lang;
       }
      
      };
      
      int main() {
      
       Builder builder;
       {
         std::cout << "--------------------------------------------" << std::endl;
         auto lang = builder.DanTouLang();
         lang.ZenMeZhuangDe();
       }
       {
         std::cout << "--------------------------------------------" << std::endl;
         auto lang = builder.ShuangTouLang();
         lang.ZenMeZhuangDe();
       }
      }
      
      • Builder就是一个组装厂。已经完成了基本的组装。然后可以批量生产了。

      • 即一次设计,批量生产。
  3. 总结

    • 核心

      • 组装厂,完成一次产品设计,后面就可以随意生成了。
    • 好处

      • 避免重复造轮子。
      • 即避免重复的写相同的创建代码。
    • 补充

      • 很多builder可能需要一两个参数。
      • 根据参数创建不同的产品。有了参数就有点工厂模式那个喂儿了。
      • 有参数就要if else判断。不过工厂是单个对象抽象,而这里的产品往往是一个集合组合。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值