假設您有一個與數據庫交互的系統。由於該系統採用數據庫如此嚴重,幾乎每個子程序遵循以下模式:Singleton或DRY
foo(database, rest, of, arguments)
這注意到相當快,因爲foo是一個更大的目標的一部分,連接變量被移動到一個對象變量。不幸的是,這意味着每個模型對象的構造函數都需要這個參數。
因此您決定創建一個可以生成與數據庫連接的模塊。由於到數據庫的連接非常昂貴,因此連接會被緩存,並且將來的調用會返回緩存的值。
你剛剛創建的是一個單身人士。這是發展界普遍反對的一種模式。再次,DRY是一個鼓勵的原則,甚至比單身模式更受鼓勵。
那哪個更好?你的選擇是膨脹進入每個函數調用(或者至少是構造函數)的參數數量,或者創建一個單例。我沒有看到第三個選項嗎?
編輯:文章爭論單身人士是http://blogs.msdn.com/b/scottdensmore/archive/2004/05/25/140827.aspx。我認爲那裏提出的論點是有道理的,我希望反單體陣營能解決這個設計問題。
如果你不能說出一個更好的理由不使用單例模式,而不是你不知道誰不參與你的開發過程而對它產生非特異性的憤怒聲音,我沒有看到爲什麼不使用它。設計模式分析的存在是爲了幫助你完成工作,而不是強制任意指出時尚性。 (並不是說你對DRY建議的原因有更具體的瞭解,但是它解決的問題是任何白癡可以看到的問題都不好。) – chaos 2012-07-13 19:40:44
這裏的每個人都有一堆應該「永不」違反的「規則」,如果你將它們全部扔在一起,永遠不會寫出一行代碼。 – 2012-07-13 19:46:24
夠公平的,我可以在我的理由更具體。我正在編輯帖子以包含每個人的原因鏈接。 – lackita 2012-07-13 19:47:17