單例模式的應用

2021-06-27 19:34:48 字數 1034 閱讀 7695



單例模式能保證類僅有乙個例項,並提供乙個訪問他的全域性的訪問點。

設計視窗常常需要獲取其他某個視窗的指標,以下圖為例:

要在qachilddialog裡面獲取主介面qmainwindows物件的指標,可以通過如下**完成:

this->parentwidget()->parentwidget();

缺點:如果對話方塊移到其它的視窗的模組下,或者視窗的層次發生了變化,**就得做出修改。

換一種方案,採用單例模式設計singleton 類,記錄主介面的指標,提供乙個全域性的訪問點。

class singleton

建構函式設為私有,以保證客戶端不能直接建立singleton的物件:

singleton ::singleton (void)

析構函式:

singleton ::~singleton (void) 

使用者只能通過訪問singleton的靜態函式getinstance()介面獲取例項,例項設定為static型別,確保整個程式執行階段singleton只有乙份例項:

singleton * singleton ::getinstance()  

註冊主視窗指標

void singleton ::setmainwindow( qwidget* mainwin )

獲取主視窗指標

qwidget* singleton ::getmainwindow()

客戶端呼叫:

在主視窗qmainwindows的建構函式中,呼叫singleton ::getinstance()->setmainwindow(this);就把主視窗的指標註冊到單例中了。

在其他的視窗中,如果要訪問主視窗的指標,直接呼叫singleton ::getinstance()->getmainwindow();就可得到主視窗的指標。

優點:在視窗層次或者視窗本身發生變化,獲取主介面指標的**都不需要修改。

多個單例模式單例模式的應用

我們在程式設計中需要乙個單例,但不僅僅是乙個單例,更多的是需要單例中的單例 即 類a為控制器,類b為例項面板 為方便找到類a,採用單例,而類a為方便找到類b,採用單例中的單例 單例a 單例b 第二個不要用new a.getinstance b.呼叫方法 import b public class a...

多個單例模式單例模式的應用

我們在程式設計中需要乙個單例,但不僅僅是乙個單例,更多的是需要單例中的單例 即 類a為控制器,類b為例項面板 為方便找到類a,採用單例,而類a為方便找到類b,採用單例中的單例 單例a 單例b 第二個不要用new a.getinstance b.呼叫方法 import b public class a...

單例模式及其應用

終極奧義 該類負責建立自己的物件,同時確保只有單個物件被建立。特點 單例類只能有乙個例項。單例類必須自己建立自己的唯一例項。單例類必須給所有其他物件提供這一例項。優點 避免頻繁物件的建立和銷毀,減少記憶體開銷。避免對資源的多重占用 比如寫檔案操作 缺點 沒有介面,不能繼承,與單一職責原則衝突。應用場...