我剛剛開始我的第一個相當大的Qt項目,這將主要是一堆按鈕,標籤部件和Qwt圖的屏幕。在我的應用程序中,Qt Quarterly 27中描述的面板堆棧模式看起來相當不錯。我的每個屏幕都是一個QWidget,封裝在一個由QStackedWidget顯示/隱藏的面板中。但是,它爲每個面板使用單身模式,因此它們並不是在應用程序啓動時立即創建,因此每個屏幕中都不會創建多個屏幕。在使用Qt進行GUI編程時,單例失敗?
所以我開始編碼。有面板堆棧工作。添加了一些代碼,以便動態更新小部件不會一直動態更新。有我的歷史堆棧/後退按鈕爲面板工作。一切似乎都很好,但我有一個嘮叨的煩惱:
- 我的代碼有異味。
我無法與這裏發佈的任何仇恨和有關單身模式的博客爭論。我想我明白了,我寫的代碼確實讓我對所有樣板文件行和全局對象感到有些dirty dirty。但是我確實不需要擔心在切換到它之前是否已經實例化一個屏幕並將其添加到我的歷史堆棧中。我只是說切換到該屏幕,它被添加到我的歷史堆棧,和魔術般的作品。
從我讀過的也有一些情況下,單身可以是值得的。這是那種特殊情況之一嗎?神奇的屏幕切換/歷史堆棧讓我覺得'是',但是我將要創建的不同單身課程的數量讓我想'不不不'。
我想只想找個人,並弄清楚如何從我的代碼現在中獲得單例模式,這樣我就不用再做了。但我不想擺脫所有的單身人士課程,只是爲了擺脫我的單身人士課程,因爲他們是EVIL [引文需要]。
任何輸入是非常感謝!
不喜歡單身人士的人通常不會因爲你基本上只是使用包裹在一個類中的全局變量。儘管仇恨者說了什麼,Singleton絕對是提供全局變量訪問的更清潔的機制。一個更好的問題可能是:「在我的用戶界面邪惡中是全球狀態追蹤?」因爲,讓我們面對它,有時你只需要知道一個控件的狀態來控制另一個類中另一個控件的狀態,並通過使用全局變量來隔離這兩個模塊,就可以在兩個不同類的成員之間給出一個依賴緩衝區。 – 2011-02-22 17:07:08
所以,我認爲你有一個很好的問題需要有不同的措辭。 – 2011-02-22 17:07:30