C++ 02 抽象工厂

  1. 说明

    • 抽象工厂

      • 工厂太大,if else太多,不好管理,就要拆分.
      • 按组进行管理.
    • 核心

      • if else不可能无限增加。
      • 多了就得拆分,不然增加管理难度。
    • 好处

      • 降低管理难度和复杂度。
  2. 案例

    • 接上回

      • 鞋贩子摆摊发财了。规模变大。租了两层楼来卖鞋。
      • 一层楼卖拖鞋,一层楼卖运动鞋。
      • 鞋子则按照很多进行分类。
      • 拖鞋有:沙滩拖鞋,人字拖等。
      • 运动鞋有:跑步鞋,篮球鞋,足球鞋等。
    • 代码

      #include<iostream>
      #include<string>
      
      
      class XieZi {
      public:
       virtual void ShaXie() = 0;
      };
      
      class ShaShaHai : public XieZi {
      public:
       void ShaXie() override {
         std::cout << "sha tan hai!" << std::endl;
       }
      };
      
      class RenZiTuo : public XieZi {
      public:
       void ShaXie() override {
         std::cout << "ren zi tuo!" << std::endl;
       }
      };
      
      class ZaPai : public XieZi {
      public:
       void ShaXie() override {
         std::cout << "bu xiao de!" << std::endl;
       }
      };
      
      class PaoBuHai : public XieZi {
      public:
       void ShaXie() override {
         std::cout << "pao bu hai!" << std::endl;
       }
      };
      
      class LanQiuHai : public XieZi {
      public:
       void ShaXie() override {
         std::cout << "lan qiu hai!" << std::endl;
       }
      };
      
      class ZuQiuHai : public XieZi {
      public:
       void ShaXie() override {
         std::cout << "zu qiu hai!" << std::endl;
       }
      };
      
      
      class XieFanZi {
      public:
       virtual XieZi* MaiXie(std::string sha_zi_xie) = 0;
      };
      
      class XieFanZiDeTuoXieZhuanGui : public XieFanZi{
      public:
       XieZi* MaiXie(std::string sha_zi_xie) {
         if ("shatanxie" == sha_zi_xie) {
           return new ShaShaHai();
         } else if ("renzituo" == sha_zi_xie) {
           return new RenZiTuo();
         } else {
           return new ZaPai();
         }
       }
      };
      
      class XieFanZiDeYunDongXieZhuanGui : public XieFanZi {
      public:
       XieZi* MaiXie(std::string sha_zi_xie) {
         if ("paobuxie" == sha_zi_xie) {
           return new PaoBuHai();
         } else if ("lanqiuxie" == sha_zi_xie) {
           return new LanQiuHai();
         } else if ("zuqiuxie" == sha_zi_xie) {
           return new ZuQiuHai();
         } else {
           return new ZaPai();
         }
       }
      };
      
      int main () {
       {
         std::cout << "-------------welcom to yilou zhuangui---------------" << std::endl;
         XieFanZi * yilou = new XieFanZiDeTuoXieZhuanGui();
         XieZi * xiezi1 = yilou->MaiXie("shatanxie");
         xiezi1->ShaXie();
         XieZi * xiezi2 = yilou->MaiXie("renzituo");
         xiezi2->ShaXie();
         XieZi * xiezi3 = yilou->MaiXie("dongdongxie");
         xiezi3->ShaXie();
       }
       {
         std::cout << "-------------welcom to erlou zhuangui---------------" << std::endl;
         XieFanZi * erlou = new XieFanZiDeYunDongXieZhuanGui();
         XieZi * xiezi1 = erlou->MaiXie("shatanxie");
         xiezi1->ShaXie();
         XieZi * xiezi2 = erlou->MaiXie("paobuxie");
         xiezi2->ShaXie();
         XieZi * xiezi3 = erlou->MaiXie("zuqiuxie");
         xiezi3->ShaXie();
       }
      }
      
    • 说明

      • 当规模变大,就不好管理,就需要拆分,分两层。
      • 两层就雇两个店员照看。
  3. 总结

    • 拆分

      • 规模打了就不好管理。
      • 就需要拆分,分而治之。
    • 好处

      • 降低难度。
    • 坏处

      • 同普通工厂。
    • 场景

      • 规模扩张很大得时候,就需要分门别类,单独拆分出来了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值