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

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 閱讀(814) 評論(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>
            亚洲视频精选| 亚洲婷婷免费| 欧美三区在线| 欧美日韩国产不卡| 欧美激情免费观看| 欧美日韩免费一区二区三区视频 | 亚洲天堂激情| 亚洲一级黄色| 久久www成人_看片免费不卡| 欧美一区网站| 久久久xxx| 欧美黄色大片网站| 国产精品电影观看| 国产午夜精品一区二区三区欧美| 国产精品一区二区在线观看网站| 黑人巨大精品欧美一区二区| 日韩午夜激情| 久久国产精品一区二区| 欧美成人黄色小视频| 亚洲日本va午夜在线电影| 亚洲激情成人| 欧美专区18| 欧美人与性动交α欧美精品济南到 | 欧美在线观看视频| 欧美 日韩 国产一区二区在线视频 | 亚洲少妇一区| 巨乳诱惑日韩免费av| 国产精品人人做人人爽 | 欧美亚洲色图校园春色| 久久中文在线| 亚洲大片一区二区三区| 欧美专区中文字幕| 亚洲国产欧美精品| 亚洲女与黑人做爰| 欧美激情区在线播放| 国产情人综合久久777777| 91久久国产自产拍夜夜嗨 | 欧美搞黄网站| 亚洲一区日韩在线| 欧美激情中文字幕一区二区| 国产亚洲一二三区| 亚洲欧美国产77777| 亚洲高清网站| 久久九九免费视频| 国产欧美日本一区视频| 亚洲视频在线观看三级| 欧美二区乱c少妇| 久久国产精品久久久久久| 欧美日韩专区| 亚洲乱亚洲高清| 欧美成人免费全部| 久久久国产一区二区| 国产日韩精品电影| 亚洲欧美另类在线观看| 日韩视频在线一区| 欧美精品久久一区| 亚洲精品午夜精品| 亚洲高清不卡在线观看| 久热精品视频在线免费观看| 在线观看中文字幕亚洲| 久久午夜电影网| 欧美尤物巨大精品爽| 国产视频一区免费看| 欧美中文在线视频| 欧美在线看片| 激情成人综合| 免费av成人在线| 免费成人av在线| 一区二区冒白浆视频| 亚洲久久一区| 国产精品免费一区二区三区在线观看| 亚洲一区图片| 亚洲天堂成人在线观看| 国产日本欧美一区二区三区在线| 性久久久久久久久| 欧美在线一区二区三区| 精品动漫av| 亚洲电影网站| 欧美视频中文一区二区三区在线观看| 夜夜嗨一区二区三区| 一本色道综合亚洲| 国产免费观看久久黄| 久久婷婷成人综合色| 久久综合九色九九| 夜夜精品视频一区二区| 午夜亚洲性色福利视频| 经典三级久久| 亚洲人体影院| 国产一区二区视频在线观看| 国产毛片精品视频| 好吊色欧美一区二区三区四区 | 亚洲精品美女91| 国产精品xxxxx| 久久久人人人| 欧美激情久久久久| 欧美一区亚洲一区| 免费亚洲一区二区| 亚洲欧美日韩一区二区| 久久亚洲高清| 亚洲欧美国产精品专区久久| 久久久久久噜噜噜久久久精品| 亚洲破处大片| 亚洲欧美日韩区| 99国产麻豆精品| 欧美一级视频| 在线综合亚洲| 久久婷婷一区| 亚洲欧美国产精品桃花| 欧美va天堂在线| 久久青草欧美一区二区三区| 欧美日韩天天操| 欧美激情一区二区三区蜜桃视频| 国产精品久久久久国产精品日日| 欧美aⅴ99久久黑人专区| 国产精品福利在线观看| 欧美激情一区二区三级高清视频| 国产一区二区三区四区在线观看 | 亚洲精华国产欧美| 伊人天天综合| 欧美一区二区三区成人| 中文一区字幕| 欧美精品一区二| 久久婷婷麻豆| 国产亚洲人成a一在线v站| 亚洲最新中文字幕| 一本色道久久综合狠狠躁的推荐| 久久久久久噜噜噜久久久精品| 欧美中文字幕视频在线观看| 国产精品s色| 99精品国产福利在线观看免费| 亚洲黄色成人| 免费av成人在线| 欧美国产亚洲视频| 影音先锋国产精品| 久久久国产亚洲精品| 久久免费视频观看| 国产一区二区久久| 性做久久久久久久久| 欧美一区二区三区四区高清| 国产精品久久久久久久久免费樱桃| 亚洲三级电影在线观看| 日韩一二三在线视频播| 欧美区国产区| 日韩亚洲欧美在线观看| 一区二区三区欧美成人| 欧美日韩一区二区三区四区在线观看 | 狂野欧美一区| 怡红院av一区二区三区| 久久精品盗摄| 久久亚洲高清| 国产日韩欧美在线一区| 99视频精品全国免费| 亚洲一区尤物| 国产精品国产三级国产aⅴ无密码| 一片黄亚洲嫩模| 亚洲欧美日韩中文视频| 国产精品夫妻自拍| 午夜精品福利一区二区蜜股av| 久久国产日本精品| 国内久久精品| 欧美1区免费| 亚洲精品一区二区三区樱花 | 亚洲色图在线视频| 国产精品专区一| 欧美资源在线观看| 亚洲国产精品女人久久久| 一区二区三区视频观看| 国产精品自拍在线| 久久综合中文| 一本色道久久综合狠狠躁篇怎么玩 | 欧美成人蜜桃| 亚洲一区精品在线| 黄色亚洲网站| 欧美日产一区二区三区在线观看 | 久久国产精品电影| 亚洲国产精品久久91精品| 欧美人在线观看| 久久精品国产91精品亚洲| 亚洲欧洲日本在线| 久久av最新网址| 亚洲伦理在线| 国产情人综合久久777777| 欧美激情va永久在线播放| 亚洲欧美国产三级| 91久久久久久| 久久精品国产一区二区三| 亚洲乱码视频| 136国产福利精品导航网址应用 | 日韩一级免费| 激情欧美丁香| 国产精品第一页第二页第三页| 久久久久久久一区二区三区| 亚洲一区二区三区在线观看视频| 欧美激情亚洲精品| 久久久久91| 欧美亚洲在线播放| 在线综合亚洲| 一本色道久久综合亚洲精品婷婷| 极品中文字幕一区| 国产亚洲精品7777|