乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      常見設(shè)計(jì)模式--C++基礎(chǔ)

       KookNut39 2021-12-15

      單件模式(SINGLETON):
      意圖:保證一個(gè)類僅有一個(gè)實(shí)例,并提供一個(gè)訪問它的全局訪問點(diǎn)。
      動(dòng)機(jī):對(duì)于一些類來說,只有一個(gè)實(shí)例是很重要的。比如董事長是一個(gè)類,不同的公司可以有不同的董事長,但是一個(gè)公司只能有一個(gè)董事長,來對(duì)公司的各項(xiàng)決議做最終決定。
      思考:我們?cè)趺醋霾拍苁沟眠@一個(gè)類只有一個(gè)實(shí)例并且實(shí)例易于被訪問?全局變量是我們思考的一種方法,但是全局變量并不能使實(shí)例唯一化。
      解決辦法:讓類自身負(fù)責(zé)保存它的唯一實(shí)例。這個(gè)類可以保證沒有其他實(shí)例被創(chuàng)建,并且可以提供一個(gè)可以訪問該實(shí)例的方法。
      廢話不多說,看實(shí)例代碼:

      class Singleton
      {
      public:
      static Singleton* Instance();//供外部訪問該單件的接口
      protected:
      Singleton() {};//構(gòu)造函數(shù),保護(hù)起來,防止被意外實(shí)例化
      private:
      static Singleton* __Instance;//用來保存唯一實(shí)例
      };
      Singleton* Singleton::__Instance = NULL;//初始化
      Singleton* Singleton::Instance()
      {
      if (__Instance == NULL)
      {
      __Instance = new Singleton;
      }
      return __Instance;
      }
      void main()
      {
      Singleton* v1 = Singleton::Instance();
      //v1 = 0x000d6a38 {...}
      Singleton* v2 = Singleton::Instance();
      v2 = 0x000d6a38 {...}和v1指向同一片地址
      //Singleton* v3 = new Singleton;//會(huì)發(fā)出不可訪問的錯(cuò)誤報(bào)告
      //Singleton  v4;//會(huì)發(fā)出不可訪問的錯(cuò)誤報(bào)告
      system("pause");
      getchar();
      }
      

      抽象工廠模式(ABSTRACT FACTORY):
      意圖:提供一個(gè)創(chuàng)建一系列相關(guān)或相互依賴對(duì)象的接口,而無需指定他們具體的類。
      動(dòng)機(jī):生活中我們可能會(huì)遇到同樣的東西,在具體的不同的領(lǐng)域有不同的表現(xiàn)形式。當(dāng)提供一個(gè)產(chǎn)品類庫,只是想顯示他們的接口而不是實(shí)現(xiàn)時(shí),可以使用抽象工廠。就比如動(dòng)物吃飯,動(dòng)物是一個(gè)類,但是具體到某一種動(dòng)物有自己的吃飯方式。
      思考:我們?nèi)绾稳プ龅骄唧w不同的動(dòng)物類型,去做自己的事情呢?將動(dòng)物定義為一個(gè)抽象類便可以解決。
      解決辦法:我們定義抽象類之后,客戶只需要和抽象類定義的接口交互,而不使用特定的具體類的接口。
      代碼:

      class ProductA//純虛接口A
      {
      public:
      virtual void Show() = 0;
      };
      
      class ProductA1 : public ProductA
      {
      public:
      void Show()
      {
      cout << "This is ProductA1" << endl;
      }
      };
      
      class ProductA2 : public ProductA
      {
      public:
      void Show()
      {
      cout << "This is ProductA2" << endl;
      }
      };
      
      
      class ProductB//純虛接口B
      {
      public:
      virtual void Show() = 0;
      };
      
      class ProductB1 : public ProductB
      {
      public:
      void Show()
      {
      cout << "This is ProductB1" << endl;
      }
      };
      
      class ProductB2 : public ProductB
      {
      public:
      void Show()
      {
      cout << "This is ProductB2" << endl;
      }
      };
      
      class Factory//抽象基類
      {
      public:
      virtual ProductA *CreateProductA() = 0;
      virtual ProductB *CreateProductB() = 0;
      };
      
      class Factory1 : public Factory//工廠1
      {
      public:
      static Factory1* Instance();
      ProductA *CreateProductA()
      {
      return new ProductA1();
      }
      
      ProductB *CreateProductB()
      {
      return new ProductB1();
      }
      protected:
      Factory1() {};
      private:
      static Factory1* __Instance1;//保證只有一個(gè)實(shí)例
      };
      Factory1* Factory1::__Instance1 = NULL;
      Factory1* Factory1::Instance()
      {
      if (__Instance1 == NULL)
      {
      __Instance1 = new Factory1();
      }
      return __Instance1;
      }
      class Factory2 : public Factory//工廠2
      {
      public:
      static Factory2* Instance();
      ProductA *CreateProductA()
      {
      return new ProductA2();
      }
      
      ProductB *CreateProductB()
      {
      return new ProductB2();
      }
      protected:
      Factory2() {};
      private:
      static Factory2* __Instance2;//保證只有一個(gè)實(shí)例
      };
      Factory2* Factory2::__Instance2 = NULL;
      Factory2* Factory2::Instance()
      {
      if (__Instance2 == NULL)
      {
      __Instance2 = new Factory2();
      }
      return __Instance2;
      }
      

      “We all get to the peak together or we don’t get there at all.”
      參考資料:
      《設(shè)計(jì)模式》
      學(xué)習(xí)鏈接:
      https://blog.csdn.net/CoderAldrich/article/details/83114687

        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評(píng)論

        發(fā)表

        請(qǐng)遵守用戶 評(píng)論公約

        類似文章 更多