設計模式學習總結之二
三:Singleton模式(單實例模式)
顧名思義,即單例模式。其主要思想就是在項目中,僅創(chuàng)建一個實例對象。該對象的抽象,除了通過指定的獲取實例接口外,再沒其他辦法可以初始化。
此可以保證整個系統(tǒng)生命周期內,僅會有一個實例存在。可以想象一下,它是可以與先前說的工廠模式或抽象工廠模式結合使用的。因為一般來說,工廠可能只會
有一個(至少對某種邏輯處理來說是這樣的)。
在C++中,實現單例模式,相對比較直觀及合理。將該實例定義成static成員即可。并提供獲取及釋放該成員的接口。而在delphi中,(就本來的了解來說)
似乎并沒有直觀的靜態(tài)成員這一說法。但可以定義一個全局變量,并提供獲取與釋放變量的接口來模擬。(但,畢竟沒辦法同類型的實例被創(chuàng)建出來,所以最好要加
詳細注釋說明。告知其他組員,此為單實例)
參考的c++實現:
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實現:
unit xxx
interface
uses
xxx,...,yyy;
type
TMyClass = class
//xxxx
end;
var
gAObj: TMyClass;//此為全局的單實例對象。
function GetAObj: TMyClass;
procedure SafeReleaseAObj;
implemention//這個單詞忘了是不是這么寫。反應是實現的那個單詞。。
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;
//說明:以上僅是臨時寫的,并未在程序中編譯測試。但思路肯定不會錯。可供參考用。
四:Builder模式(即:構建模式)
往往在實際項目的開發(fā)過程中會發(fā)現,某些模塊的功能過于復雜。此時,我們自然就會想到將其進行進一步的劃分。如:細分成DA,DB,...,DN。然后由該模塊的某個管理角色進行協(xié)調運作。
這樣,Builder模式將可用在此設計上。其思想,就是將復雜問題進一步細化。