青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

Benjamin

靜以修身,儉以養德,非澹薄無以明志,非寧靜無以致遠。
隨筆 - 398, 文章 - 0, 評論 - 196, 引用 - 0
數據加載中……

設計模式之Singleton(單件)模型

Singleton(單件)模型:一個類只有一個實例。
下面是C++代碼的單件模型:
Class Singleton

   static Singleton s;
    int i; 
   Singleton(int x):i(x){} 
   Singleton& operator=(Singleton&);//賦值操作符 
   Singleton(const Singleton&);//拷貝構造函數,防止被用戶調用,聲明為私有
public: 
   static Singleton& instance() 
   {return s;}//產生對象的引用 
   int getValue() {return i;} 
   void SetValue(int x)
   {i = x;}
 };

Singleton Singleton::s(47);

int main(){
   Singleton& s= Singleton::instance();
   cout << s.getvalue() <<endl;
   Singleton& s2 = Singleton::instance()'
   s2.setvalue(9);
   cout<<s.getvalue()<<endl;
}
創建單件的關鍵是防止程序員控制對象的生存期的權利,所以構造函數,拷貝構造函數,賦值操作符都要聲明為私有(本例中沒有實現,因為賦值操作符和拷貝構造沒用到),并且防止編譯器產生任何缺省的構造函數。
要注意的是,這里的對象可以靜態創建,也可以知道程序員根據需求顯式創建,這個創建的方式又稱為lazy initialzation,這個做法只有在創建的對象的代價不大,并且不總是需要它的情況下才有意義。上面的這個方法并沒有限制只創建一個對象,支持創建有若干對象的對象池。如果遇到對象池中共享對象的問題,則可以對進出對象池的對象登記的方法解決。
類中的static靜態成員都是一個單件,從這個意義上說,編程語言提供了對單件的直接支持,但是如果一個對象依賴于一個對象時,對象的正確初始化就很重要了。下面是對上面的示例代碼的改進。
#include <iostream>
using namespace std;

class Singleton{
   int i;
   Singleton(int x):i(x){}
   void operator=(Singleton&);
   Singleton(const Singleton&);
public:
   static Singleton& intstance(){
   static Singleton s(45);
   return s;
  }
   int getValue() {retrun 1;}
   void setValue() {i = x;}
}

int maint()
{
   Singleton& s= Singleton::instance();
   cout<<s.getValue() <<endl;
   Singleton s2=Singletonf::instance();
   s2.setValue(9);
   cout<<s.getValue<<endl;
}
下面是Scott Meyers兩個互相依賴的單間模型,由于是Scott Meyers創建,又稱Meyers單件。
 Class Singleton1{
    Singleton1(){}
public: 
   static Singleton1& ref
   {
       static Singleton1 single;
       return single; 
   }
};
 
Class Singleton2{ 
   Singleton1 &s1; 
   Singleton2(Singleton1& s):s1(s){}
public: 
   static Singleton2& ref()
   { 
      static Singleton2 single(singleton1::ref)); 
      return single; 
   }
    Singleton1& f()
   {return s1;};

int main()

      Singleton1& s1 = Singleton2::ref().f();//導致惟一的Singleton2對象創建,Singleton2創建中,Singleton1::ref()被調用,導致Singleton1對象創建。
 }

Singleton-ness是單件模型的變體:利用遞歸模板實現。
#include <iostream>
using namespace std;

template class Singleton

   Singleton(const Singleton&); 
   Singleton& operator= (const Singleton&); 
 protected: 
   Singleton(){} 
   vitrual ~Singleton()
   {}
public: 
   static T& instance() 
   {
      static T theInstance; 
      return theInstance; 
   }
};
 
//Sample class to be made into a Singleton
Class MyClass:public Singleton
{
   int x;
protected:
    friend class Singleton;
    MyClass() 
   { x = 0;}
public: 
   void setValue(int n) 
   {x=n;}
int getVlalue()const 
   {return x;}
};

int main()

   MyClass& m = MyClass::Instance(); 
   cout << m.getValue()<<endl;
   m.setValue(1);
   cout << m.getValue()<<endl;
}
Singleton<MyClass>為友元;Singleton不依賴MyClass的大小,實際上這只是對模板參數的靜態依賴。只有當MyClass::Instance()被第一次調用時,才需要MyClass的大小。 單件模型實際應用的很少。

posted on 2009-04-09 21:28 Benjamin 閱讀(812) 評論(0)  編輯 收藏 引用 所屬分類: C/C++

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            久久久国产亚洲精品| 久久久综合免费视频| 国产精品久久久久久久久久妞妞 | 亚洲欧洲综合另类| 亚洲欧美久久| 欧美在线观看一二区| 久久久91精品国产一区二区精品| 欧美在线在线| 免费看成人av| 亚洲肉体裸体xxxx137| av成人免费观看| 亚洲免费在线播放| 欧美主播一区二区三区| 美脚丝袜一区二区三区在线观看 | 久久精品色图| 可以看av的网站久久看| 欧美h视频在线| 国产精品va| 一区二区亚洲欧洲国产日韩| 亚洲茄子视频| 久久本道综合色狠狠五月| 欧美va天堂va视频va在线| 亚洲三级电影在线观看| 翔田千里一区二区| 欧美成人亚洲成人日韩成人| 国产精品免费视频观看| 亚洲日本中文字幕| 久久精品一区四区| 在线中文字幕一区| 免费一级欧美片在线播放| 国产欧美日韩在线视频| 在线综合亚洲| 亚洲国产mv| 欧美中文字幕在线视频| 国产精品国产a级| 亚洲国产婷婷综合在线精品| 欧美亚洲一级片| 欧美激情第三页| 久久国产主播| 国产欧美精品日韩区二区麻豆天美| 91久久精品久久国产性色也91| 欧美一级专区免费大片| 亚洲美女色禁图| 蜜臀久久99精品久久久久久9 | 裸体女人亚洲精品一区| 亚洲欧美日韩国产一区| 欧美日韩国产丝袜另类| 亚洲高清电影| 麻豆91精品91久久久的内涵| 亚洲欧美日韩在线播放| 欧美裸体一区二区三区| 亚洲人成人99网站| 免费成人黄色片| 久久九九国产| 伊甸园精品99久久久久久| 久久久久久夜| 久久久国产午夜精品| 一区二区三区在线视频免费观看 | 久久99在线观看| 国产欧美日韩一区二区三区| 午夜精品免费| 午夜精品区一区二区三| 国产精品女人毛片| 欧美一级专区| 欧美日韩在线一二三| 久久av最新网址| 国产精品二区在线| 男男成人高潮片免费网站| 亚洲与欧洲av电影| 国产日韩欧美在线视频观看| 欧美国产一区在线| 国产毛片精品国产一区二区三区| 免费在线亚洲| 免费欧美在线视频| 韩国一区二区在线观看| 亚洲欧美经典视频| 欧美中文在线免费| 国产伦精品一区二区三区在线观看| 亚洲全黄一级网站| 亚洲激情在线观看视频免费| 久久精品一区二区| 亚洲第一福利视频| 一本色道久久99精品综合| 欧美午夜宅男影院| 午夜一级久久| 亚洲国产精品久久91精品| 亚洲免费观看视频| 国产精品免费一区二区三区观看| 亚洲综合成人婷婷小说| 久久久夜色精品亚洲| 99视频精品| 国产精品免费观看在线| 久久天堂国产精品| 亚洲少妇在线| 91久久夜色精品国产网站| 欧美在线看片| 一区二区三区视频在线| 精品999日本| 国产欧美日韩精品专区| 久久精品视频亚洲| 怡红院精品视频在线观看极品| 另类尿喷潮videofree| 亚洲欧美一区二区原创| 亚洲精品网址在线观看| 欧美本精品男人aⅴ天堂| 亚洲一区欧美二区| 一区二区91| 一本久道久久综合中文字幕| 在线观看中文字幕不卡| 国产日韩精品视频一区| 亚洲国产一区二区三区a毛片| 亚洲视频精选在线| 欧美精品aa| 欧美一区二区三区播放老司机| 欧美在线黄色| 国产久一道中文一区| 日韩亚洲欧美精品| 亚洲国产日韩在线| 亚洲欧洲日本mm| 一区二区三区三区在线| 先锋影音国产精品| 欧美国产综合一区二区| 欧美无砖砖区免费| 精品99一区二区三区| 在线视频精品一区| 性欧美办公室18xxxxhd| 久久爱91午夜羞羞| 欧美激情精品久久久六区热门| 欧美国产一区视频在线观看| 亚洲免费av观看| 久久国产欧美精品| 欧美顶级少妇做爰| 国产欧美日韩不卡| 亚洲欧美激情一区| 久久在线播放| 久久国产一区二区| 国产美女精品免费电影| 日韩视频在线播放| 免费精品视频| 久久久久久伊人| 怡红院精品视频| 裸体歌舞表演一区二区| 精品成人国产在线观看男人呻吟| 性欧美大战久久久久久久久| 亚洲精品乱码久久久久久久久| 欧美日韩高清不卡| 亚洲欧洲精品一区二区三区波多野1战4| 久久久久看片| 久久国内精品视频| 亚洲欧洲另类| 91久久精品久久国产性色也91| 久久狠狠亚洲综合| 在线观看日韩av先锋影音电影院| 老司机免费视频久久| 欧美精品久久99久久在免费线| 亚洲久色影视| 亚洲精品国精品久久99热一| 欧美成人伊人久久综合网| 在线观看日韩国产| 欧美在线国产精品| 久久综合色播五月| 精品二区久久| 久久久99国产精品免费| 亚洲精品一区二区三区婷婷月| 狂野欧美激情性xxxx欧美| 欧美另类在线播放| 美女黄网久久| 国产日韩欧美综合在线| 99国产精品自拍| 极品尤物久久久av免费看| 在线中文字幕日韩| 日韩一级精品| 欧美国产免费| 最新精品在线| 亚洲国语精品自产拍在线观看| 亚洲一区二区三区中文字幕在线| 亚洲老板91色精品久久| 欧美一区二区三区在线看| 9i看片成人免费高清| 久久久久久999| 欧美99在线视频观看| 亚洲二区免费| 欧美日韩日日夜夜| 亚洲人成在线观看网站高清| 国产一区二区三区最好精华液| 欧美一区二区在线免费播放| 免费人成精品欧美精品| 国产精品初高中精品久久| 国产精品九九久久久久久久| 99精品国产高清一区二区| 亚洲小说春色综合另类电影| 国产精品多人| 久久久久一区| 亚洲欧洲精品一区| 久久国内精品自在自线400部| 久久国产精品黑丝| 亚洲精品小视频在线观看| 一区二区欧美激情| 在线免费观看视频一区| 国产精品日日摸夜夜摸av|