You are on page 1of 3

Mөc đích:

Bҧo đҧm lӟp chӍ có mӝt mүu, và cung cҩp mӝt điӇm toàn cөc truy cұp vào nó.

Đӝng cơ:

ĐiӅu này thì quan trӑng đӕi vӟi mӝt sӕ lӟp có đúng mӝt mүu. Mһc dù có thӇ có
nhiӅu máy in trong cùng mӝt hӋ thӕng, chӍ cҫn có mӝt máy in spooler. Nên có duy
nhҩt mӝt hӋ thӕng tұp tin và mӝt cӱa sәquҧn lý. Bӝ lӑc sӕ sӁ có mӝtbӝ chuyӇn đәi
A/D. HӋ thӕng kӃ toán sӁ chuyên dành riêng cho phөc vө mӝt công ty.

Làm sao chúng ta có thӇ chҳc rҵng mӝt lӟp chӍ có duy nhҩt mӝt mүu, và mүu đó có
dӉ truy xuҩt hay không? Mӝt biӃn toàn cөc làm cho đӕi tưӧng đưӧc truy xuҩt,
nhưng nó không làm cho bҥn không minh hoҥ nhiӅu đӕi tưӧng

à  

Dưӟi đây là vҩn đӅ thӵc hiӋn đӇ xem xét khi sӱ dөng mүu Singleton:

' Ê Đҧm bҧo thӇ hiӋn duy nhҩt. Mүu Singleton làm cho thӇ hiӋn duy nhҩt mӝt
thӇ hiӋn thông thưӡng cӫa mӝt lӟp, nhưng lӟp đó đưӧc viӃt đӇ mà duy nhҩt 1
thӇ hiӋn có thӇ đưӧc tҥo. Mӝt phương pháp thông thưӡng đӇ làm điӅu này là
giҩu các thao tác tҥo ra thӇ hiӋn sau thao tác lӟp (đó là, hoһc mӝt hàm thành
viên tĩnh hoһc là mӝt phương thӭc lӟp) mà đҧm bҧo chӍ mӝt thӇ hiӋn đưӧc
tҥo. Thao tác này truy xuҩt tӟi các biӃn nҳm giӳ thӇ hiӋn duy nhҩt, và chҳc
rҵng biӃn thì đưӧc khӣi tҥo vӟi thӇ hiӋn duy nhҩt trưӟc khi trҧ vӅ giá trӏ cӫa
nó. Cách tiӃp cұn này đҧm bҧo rҵng singleton đưӧc tҥo ra và khӣi tҥo trưӟc
khi sӱ dөng lҫn đҫu.

Bҥn có thӇ đӏnh nghĩa thao tác lӟp trong C++ vӟi mӝt hàm thành viên tĩnh i  
cӫa lӟp   
.   
cũng đӏnh nghĩa mӝt biӃn thàn viên tĩnh    là
biӃn con trӓ trӓ đӃn thӇ hiӋn duy nhҩt cӫa nó.

Lӟp   
đưӧc khai báo như sau:

class Singleton {
public:
static Singleton* Instance();
protected:
Singleton();
private:
static Singleton* _instance;
};
ViӋc thӵc hiӋn tương ӭng là:

Singleton* Singleton::_instance = 0;

Singleton* Singleton::Instance () {
if (_instance == 0) {
_instance = new Singleton;
}
return _instance;
}
clients truy cұp vào singleton đӝc quyӅn thông qua các hàm thành viên   
biӃn    đưӧc khӣi tҥo bҵng 0 và hàm thành viên tĩnh    trҧ vӅ giá trӏ
cӫa nó, khӣi tҥo nó vӟi mӝt thӇ hiӋn duy nhҩt nӃu nó bҵng 0. i   khӣi tҥo mà
giá trӏ nó trҧ vӅ không đưӧc tҥo ra và lưu trӳ cho đӃn khi nó đưӧc truy xuҩt lҫn đҫu
tiên.

Chú ý rҵng hàm tҥo là 


 mӝt client mà truy cұp trӵc tiӃp đӃn   

bӏ báo lӛi biên dӏch. ĐiӅu này đҧm bҧo rҵng bao giӡ cũng chӍ có mӝt i   đưӧc
tҥo ra.

Hơn thӃ nӳa,    là mӝt biӃn con trӓ trӓ đӃn đӕi tưӧng   
, hàm thành
viên i  có thӇ chӍ đӏnh mӝt con trӓ tӟi mӝt lӟp con cӫa   
tӟi biӃn này.
Chúng tôi sӁ có mӝt ví dө vӅ điӅu này trong phҫn  


Có mӝt sӕ điӅu cҫn lưu ý khi thӵc hiӋn vӟi C++. Nó không đӫ đӇ khai báo
  
như mӝt đӕi tưӧng toàn cөc hay tĩnh và sau đó dӵa vào tӵ đӝng khӣi tҥo.
Có 3 lý do cho điӅu này:

1.Ê Chúng ta không thӇ đҧm bҧo rҵng duy nhҩt mӝt thӇ hiӋn cӫa đӕi tưӧng sӁ
đưӧc khai báo.
2.Ê Chúng ta không thӇ có đӫ thông tin đӇ khӣi tҥo mӑi   
tҥi thӡi điӇm
khӣi tҥo tĩnh. Mӝt   
có thӇ đòi hӓi các kӃt quҧ mà đưӧc tính toán sau
khi chương trình thӵc hiӋn.
3.Ê C + + không xác đӏnh thӭ tӵ mà các hàm tҥo cho các đӕi tưӧng trên toàn cөc
đưӧc gӑi là đơn vӏ dӏch [ES90]. ĐiӅu này có nghĩa là không phө thuӝc có thӇ
tӗn tҥi giӳa các   
, nӃu có làm thì lӛi là không thӇ tránh khӓi.

You might also like