設(shè)計(jì)模式學(xué)習(xí)總結(jié)之二
三:Singleton模式(單實(shí)例模式)
顧名思義,即單例模式。其主要思想就是在項(xiàng)目中,僅創(chuàng)建一個(gè)實(shí)例對(duì)象。該對(duì)象的抽象,除了通過指定的獲取實(shí)例接口外,再?zèng)]其他辦法可以初始化。
此可以保證整個(gè)系統(tǒng)生命周期內(nèi),僅會(huì)有一個(gè)實(shí)例存在??梢韵胂笠幌?,它是可以與先前說的工廠模式或抽象工廠模式結(jié)合使用的。因?yàn)橐话銇碚f,工廠可能只會(huì)
有一個(gè)(至少對(duì)某種邏輯處理來說是這樣的)。
在C++中,實(shí)現(xiàn)單例模式,相對(duì)比較直觀及合理。將該實(shí)例定義成static成員即可。并提供獲取及釋放該成員的接口。而在delphi中,(就本來的了解來說)
似乎并沒有直觀的靜態(tài)成員這一說法。但可以定義一個(gè)全局變量,并提供獲取與釋放變量的接口來模擬。(但,畢竟沒辦法同類型的實(shí)例被創(chuàng)建出來,所以最好要加
詳細(xì)注釋說明。告知其他組員,此為單實(shí)例)
參考的c++實(shí)現(xiàn):
class CA
{
private:
CA(){}
private:
static CA* m_pAObj;
public:
virtual ~CA(){}
static CA* GetAObj(void)
{
if (m_pAObj == NULL)
m_pAObj = new CA();
return m_pAObj;
}
static void SafeReleaseAObj(void)
{
if (m_pAObj != NULL)
delete m_pAObj;
m_pAObj = NULL;
}
};
static CA* CA::m_pAObj = NULL;
參考的Delphi實(shí)現(xiàn):
unit xxx
interface
uses
xxx,...,yyy;
type
TMyClass = class
//xxxx
end;
var
gAObj: TMyClass;//此為全局的單實(shí)例對(duì)象。
function GetAObj: TMyClass;
procedure SafeReleaseAObj;
implemention//這個(gè)單詞忘了是不是這么寫。反應(yīng)是實(shí)現(xiàn)的那個(gè)單詞。。
procedure SafeReleaseAObj;
begin
if Assigned(gAObj) then
FreeAndNil(gAObj);
end;
funciton GetAObj: TMyClass;
begin
if not Assigned(gAObj) then
gAObj = TMyClass.Create;
Result := gAObj;
end;
//說明:以上僅是臨時(shí)寫的,并未在程序中編譯測試。但思路肯定不會(huì)錯(cuò)。可供參考用。
四:Builder模式(即:構(gòu)建模式)
往往在實(shí)際項(xiàng)目的開發(fā)過程中會(huì)發(fā)現(xiàn),某些模塊的功能過于復(fù)雜。此時(shí),我們自然就會(huì)想到將其進(jìn)行進(jìn)一步的劃分。如:細(xì)分成DA,DB,...,DN。然后由該模塊的某個(gè)管理角色進(jìn)行協(xié)調(diào)運(yùn)作。
這樣,Builder模式將可用在此設(shè)計(jì)上。其思想,就是將復(fù)雜問題進(jìn)一步細(xì)化。