Re: [問題] 有關全域變數

看板C_and_CPP (C/C++)作者 (meow)時間14年前 (2012/06/10 21:21), 編輯推噓3(3020)
留言23則, 7人參與, 最新討論串3/3 (看更多)

06/10 20:24,
四人幫的Design pattern根本就不該放什麼singleton
06/10 20:24

06/10 20:25,
應該放context pattern才對
06/10 20:25
最近剛好在想這個問題 想要請教各位高手的看法 我有一個管理某對應表的儲存區 幾個不同的物件都會跟這個儲存區索取資料 這個對應表裡面的資料筆數與順序並不是固定的 每次執行可能會有所差異 但我必須確保所有人拿到的都是同樣一份對應表 以免發生衝突 要實作以上的描述 我第一個想到的就是singleton 不過我爬了一下文 又看了一些網路上的討論 許多人似乎都認為singleton的使用本身就是問題 那麼 這種情況如果不用singleton 比較好的解決方案應該是什麼呢? 還是說架構上根本就不應該出現這種設計? -- 直接閱讀《琴劍六記》 http://gs.cathargraph.com/p/list.html   《琴劍六記》Facebook專頁 https://www.facebook.com/GSannals -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 61.62.253.50

06/10 21:37, , 1F
有人會認為singleton也不過就是某種global.
06/10 21:37, 1F

06/10 21:38, , 2F
會需要特別在意的是 如何拿到同一份, 以及如何呼叫這個方法.
06/10 21:38, 2F

06/10 21:39, , 3F
前者是 singleton的方法 後者是 使用者的教育
06/10 21:39, 3F

06/10 23:07, , 4F
singleton的問題在於他同時有「只有一份」和
06/10 23:07, 4F

06/10 23:07, , 5F
「到處都拿得到」這兩個屬性,有時候其實不該用在一起
06/10 23:07, 5F

06/10 23:16, , 6F
我讀了四人幫的書和Modern C++ Design 大致瞭解singleton
06/10 23:16, 6F

06/10 23:17, , 7F
的實作方式 也看了一些網路上批評singleton的意見
06/10 23:17, 7F

06/10 23:18, , 8F
現在的問題比較是 不用它的話我的狀況該如何作?
06/10 23:18, 8F

06/10 23:20, , 9F
a兄的意思是說應該將這兩個性質分開? 必要時再複合起來?
06/10 23:20, 9F

06/10 23:53, , 10F
大部分的人用singleton的時候其實只想要「到處拿得到」
06/10 23:53, 10F

06/10 23:54, , 11F
可以用global,ServiceLocator或是DependencyInjection
06/10 23:54, 11F

06/10 23:55, , 12F
來取代
06/10 23:55, 12F

06/10 23:55, , 13F
可是如果用了singleton哪天你發現你需要多個實體的時候
06/10 23:55, 13F

06/10 23:56, , 14F
改起來就麻煩了
06/10 23:56, 14F

06/11 00:00, , 15F
用singleton重點就是只要一個實體,需要多個實體就跟
06/11 00:00, 15F

06/11 00:00, , 16F
singleton有所衝突,一開始這是整個架構的改變
06/11 00:00, 16F

06/11 00:24, , 17F
yoco已經在上一篇回答了你的問題,那就是放在參數
06/11 00:24, 17F

06/11 00:24, , 18F
實例上可以參考 Android API 的設計
06/11 00:24, 18F

06/11 00:29, , 19F
06/11 00:29, 19F

06/11 00:35, , 20F
l大請問你有用 context 的 win32 API範例嗎?
06/11 00:35, 20F

06/11 00:35, , 21F
想知道你所說的context是什麼?
06/11 00:35, 21F

06/11 00:40, , 22F
http://goo.gl/b1i3E 看engine那個變數,就含random的狀態
06/11 00:40, 22F

06/11 01:28, , 23F
感謝^^!
06/11 01:28, 23F
文章代碼(AID): #1Fr9zl91 (C_and_CPP)
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 3 之 3 篇):
文章代碼(AID): #1Fr9zl91 (C_and_CPP)