設(shè)計(jì)模式或許是面向?qū)ο笤O(shè)計(jì)方法學(xué)前進(jìn)過(guò)程中的最新,最重要的一步。設(shè)計(jì)模式當(dāng)今已成為面向?qū)ο蟪绦蛟O(shè)計(jì)的重要部分。
單件也許是最簡(jiǎn)單的設(shè)計(jì)模式,它是允許一個(gè)類有且僅有一個(gè)實(shí)例的方法。創(chuàng)建一個(gè)單件模式的關(guān)鍵是防止客戶程序員獲得任何控制其對(duì)象生存期的權(quán)利。為了做到這一點(diǎn),聲明所有的構(gòu)造函數(shù)為私有,并且防止編譯器隱式生成任何構(gòu)造函數(shù)。注意,拷貝構(gòu)造函數(shù)和賦值操作符(這兩個(gè)故意沒(méi)有實(shí)現(xiàn),,因?yàn)樗鼈兏静粫?huì)被調(diào)用)被聲明為私有,以便防止任何這類復(fù)制動(dòng)作產(chǎn)生。這種方法并沒(méi)有限制只創(chuàng)建一個(gè)對(duì)象。這種技術(shù)也支持創(chuàng)建有限個(gè)對(duì)象的對(duì)象池。
下面的程序顯示在c++中如何實(shí)現(xiàn)一個(gè)單件模式
#include<iostream>
using namespace std;
class Singleton
{
static Singleton s;
int i;
Singleton(int x):i(x){}
Singleton & operator=(Singleton &); //disallowed
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;
}
參考:c++ 編程思想 2