<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      設(shè)計(jì)模式之抽象工廠模式(學(xué)習(xí)筆記)

      定義

      抽象工廠模式是一種創(chuàng)建型設(shè)計(jì)模式,它提供一個(gè)接口,用于創(chuàng)建一系列相關(guān)或依賴的對(duì)象,而無(wú)需指定它們的具體類。抽象工廠模式將對(duì)象的創(chuàng)建過(guò)程抽象化,允許子類通過(guò)實(shí)現(xiàn)具體工廠類來(lái)定制對(duì)象的創(chuàng)建。

      為什么使用抽象工廠模式

      1. 產(chǎn)品族的一致性

        • 抽象工廠模式確保同一產(chǎn)品族中的對(duì)象之間的一致性。
      2. 部分遵循開閉原則

        • 可以通過(guò)添加新的具體工廠類來(lái)擴(kuò)展新的產(chǎn)品族,而不需要修改現(xiàn)有代碼,符合開閉原則。
        • 增加新的產(chǎn)品類型時(shí),需要修改抽象工廠接口及其所有具體實(shí)現(xiàn),不完全符合開閉原則。
      3. 隱藏對(duì)象創(chuàng)建細(xì)節(jié)

        • 抽象工廠模式將具體產(chǎn)品的創(chuàng)建過(guò)程隱藏起來(lái),客戶端只需要使用工廠提供的接口來(lái)獲取對(duì)象。

      實(shí)現(xiàn)步驟

      1. 定義抽象產(chǎn)品類

        • 定義所有具體產(chǎn)品類的共同接口,客戶端將通過(guò)這個(gè)接口來(lái)使用具體產(chǎn)品。
      2. 實(shí)現(xiàn)具體產(chǎn)品類

        • 實(shí)現(xiàn)產(chǎn)品接口的具體產(chǎn)品類,這些類包含了產(chǎn)品的實(shí)際業(yè)務(wù)邏輯。
      3. 定義抽象工廠類

        • 定義一個(gè)抽象工廠類,包含用于創(chuàng)建一系列相關(guān)或依賴對(duì)象的抽象方法,子類將實(shí)現(xiàn)這些方法來(lái)創(chuàng)建具體產(chǎn)品對(duì)象。
      4. 實(shí)現(xiàn)具體工廠類

        • 繼承抽象工廠類并實(shí)現(xiàn)其抽象方法,具體工廠類負(fù)責(zé)創(chuàng)建具體產(chǎn)品對(duì)象。

      優(yōu)缺點(diǎn)和適用場(chǎng)景

      優(yōu)點(diǎn)

      1. 產(chǎn)品族的一致性

        • 確保同一產(chǎn)品族中的對(duì)象之間的一致性。
      2. 部分符合開閉原則

        • 可以通過(guò)添加新的具體工廠類來(lái)擴(kuò)展新的產(chǎn)品族,符合開閉原則。
      3. 隱藏對(duì)象創(chuàng)建細(xì)節(jié)

        • 客戶端無(wú)需知道具體產(chǎn)品的創(chuàng)建過(guò)程,只需要通過(guò)工廠接口獲取對(duì)象。

      缺點(diǎn)

      1. 增加系統(tǒng)復(fù)雜性

        • 引入了更多的類,增加了系統(tǒng)的復(fù)雜性。
      2. 不完全符合開閉原則

        • 增加新的產(chǎn)品類型時(shí),需要修改抽象工廠接口及其所有具體實(shí)現(xiàn),不完全符合開閉原則。

      適用場(chǎng)景

      1. 系統(tǒng)需要?jiǎng)?chuàng)建一系列相關(guān)或依賴的對(duì)象

        • 當(dāng)系統(tǒng)需要?jiǎng)?chuàng)建一系列相關(guān)或依賴的對(duì)象,并且確保這些對(duì)象之間的一致性時(shí),適合使用抽象工廠模式。
      2. 產(chǎn)品族擴(kuò)展

        • 當(dāng)系統(tǒng)需要通過(guò)增加新的產(chǎn)品族來(lái)擴(kuò)展功能,而不需要修改現(xiàn)有代碼時(shí),適合使用抽象工廠模式。

      簡(jiǎn)單工廠模式、工廠方法模式與抽象工廠模式的比較

      特性
      簡(jiǎn)單工廠模式
      工廠方法模式
      抽象工廠模式
      創(chuàng)建對(duì)象的職責(zé)
      單一工廠類負(fù)責(zé)所有產(chǎn)品創(chuàng)建
      子類決定創(chuàng)建具體對(duì)象
      子類決定創(chuàng)建一系列相關(guān)對(duì)象
      遵循開閉原則
      不符合,增加新產(chǎn)品需修改工廠類
      符合,增加新產(chǎn)品無(wú)需修改工廠類
      部分符合,增加產(chǎn)品族符合
      系統(tǒng)復(fù)雜性
      較低
      中等
      較高
      產(chǎn)品族一致性支持
      不支持
      不支持
      支持

      咖啡店的例子

      我們可以使用抽象工廠模式來(lái)實(shí)現(xiàn)一個(gè)咖啡店系統(tǒng),該系統(tǒng)可以創(chuàng)建不同種類的咖啡及其配套的杯子和勺子。
      #include <iostream>
      #include <memory>
      #include <string>
      
      
      // 抽象產(chǎn)品類:咖啡
      class Coffee {
      public:
          virtual ~Coffee() {}
          virtual std::string getDescription() const = 0;
          virtual double cost() const = 0;
      };
      
      
      // 具體產(chǎn)品類:美式咖啡
      class Americano : public Coffee {
      public:
          std::string getDescription() const override {
              return "Americano";
          }
          double cost() const override {
              return 5.0;
          }
      };
      
      
      // 抽象產(chǎn)品類:咖啡杯
      class CoffeeCup {
      public:
          virtual ~CoffeeCup() {}
          virtual std::string getDescription() const = 0;
      };
      
      
      // 具體產(chǎn)品類:美式咖啡杯
      class AmericanoCup : public CoffeeCup {
      public:
          std::string getDescription() const override {
              return "Americano Cup";
          }
      };
      
      
      // 抽象產(chǎn)品類:咖啡勺
      class CoffeeSpoon {
      public:
          virtual ~CoffeeSpoon() {}
          virtual std::string getDescription() const = 0;
      };
      
      
      // 具體產(chǎn)品類:美式咖啡勺
      class AmericanoSpoon : public CoffeeSpoon {
      public:
          std::string getDescription() const override {
              return "Americano Spoon";
          }
      };
      
      
      // 抽象工廠類
      class CoffeeFactory {
      public:
          virtual ~CoffeeFactory() {}
          virtual std::shared_ptr<Coffee> createCoffee() const = 0;
          virtual std::shared_ptr<CoffeeCup> createCoffeeCup() const = 0;
          virtual std::shared_ptr<CoffeeSpoon> createCoffeeSpoon() const = 0;
      };
      
      
      // 具體工廠類:美式咖啡工廠
      class AmericanoFactory : public CoffeeFactory {
      public:
          std::shared_ptr<Coffee> createCoffee() const override {
              return std::make_shared<Americano>();
          }
          std::shared_ptr<CoffeeCup> createCoffeeCup() const override {
              return std::make_shared<AmericanoCup>();
          }
          std::shared_ptr<CoffeeSpoon> createCoffeeSpoon() const override {
              return std::make_shared<AmericanoSpoon>();
          }
      };
      
      
      int main() {
          // 創(chuàng)建美式咖啡及其配套杯子和勺子
          std::shared_ptr<CoffeeFactory> americanoFactory = std::make_shared<AmericanoFactory>();
          std::shared_ptr<Coffee> americano = americanoFactory->createCoffee();
          std::shared_ptr<CoffeeCup> americanoCup = americanoFactory->createCoffeeCup();
          std::shared_ptr<CoffeeSpoon> americanoSpoon = americanoFactory->createCoffeeSpoon();
      
      
          std::cout << "Coffee: " << americano->getDescription() << ", Cost: " << americano->cost() << std::endl;
          std::cout << "Cup: " << americanoCup->getDescription() << std::endl;
          std::cout << "Spoon: " << americanoSpoon->getDescription() << std::endl;
      
      
          return 0;
      }

       

      posted @ 2024-07-17 17:39  大雄的叮當(dāng)貓  閱讀(348)  評(píng)論(0)    收藏  舉報(bào)
      主站蜘蛛池模板: 亚洲2区3区4区产品乱码2021| 开心色怡人综合网站| 四虎成人在线观看免费| 久久精品女人天堂av| 国产精品白浆免费视频| 国产熟女肥臀精品国产馆乱| 亚洲一区二区三级av| 亚洲欧洲日产国无高清码图片| 精品国产不卡在线观看免费| 亚洲欧美日产综合在线网| 一区二区亚洲精品国产精华液| 国产精品自拍视频我看看| 日韩高清亚洲日韩精品一区二区| 天天躁夜夜躁av天天爽| 精品视频一区二区福利午夜| 亚洲国产精品午夜福利| 亚洲最大中文字幕无码网站| 欧美精欧美乱码一二三四区| 九九热视频精选在线播放| 18禁无遮挡啪啪无码网站| 亚洲成人av在线系列| 免费播放一区二区三区| 日韩av综合免费在线| 黄瓜视频在线观看| 久久精品一本到东京热| 东方四虎在线观看av| 午夜福利啪啪片| 国产精品三级黄色小视频| 九九热免费精品视频在线| 日本强好片久久久久久aaa| 蜜桃臀av一区二区三区| 高潮潮喷奶水飞溅视频无码| 思思久99久女女精品| 天堂av资源在线免费| 精品国产中文字幕在线| 久久天天躁狠狠躁夜夜2020老熟妇| 国产一区二区三区内射高清| 热久久这里只有精品99| 鲁丝片一区二区三区免费| 欧美性xxxxx极品| 久久精品久久精品久久精品|