看板 C_Sharp 關於我們 聯絡資訊
因為原本就使用在設計模式下的架構 在抽象類別的地方使用了蠻多的static 來當作是類似全域變數的功能 (就是所有繼承抽象的class,抓取相同的變數來動作) 但是現在需要使用多執行緒,來實現不同的功能 每個執行緒會包相同的設計模式的架構 但是不同的執行緒 設計模式內部的資料是要不一樣的 請問這有什麼好辦法解決嗎 不知道有沒有人看得懂我在問什麼..... -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 220.134.59.89 ※ 文章網址: https://www.ptt.cc/bbs/C_Sharp/M.1457860177.A.C7D.html
m339606: 不明白 03/13 18:19
ssccg: 不懂為什麼在不同class要共用的變數卻在不同thread不共用.. 03/13 19:01
ssccg: 感覺一般設計上要兩套一樣的會是生兩套instance,不會是同 03/13 19:03
ssccg: 一套然後寫成static,再用thread去拆兩套.. 03/13 19:03
ssccg: 也許當初用static共用而不是用DI注入同一個變數就錯了 03/13 19:05
ssccg: 不過還是回你的問題,不同thread各一份可以用ThreadLocal 03/13 19:06
GoalBased: 為了設計模式而設計模式吧.. 03/13 19:27
Litfal: 設計模式下的架構怎麼會常用static...只有簡單工廠明顯用 03/14 02:39
Litfal: 到吧。 03/14 02:39
Litfal: 喔,還有獨體模式 03/14 02:41
Litfal: 然後你抽象類大量用到外部變數(也就是你寫成static的)就要 03/14 02:43
Litfal: 認真考慮一下你的OOAD是不是有問題... 03/14 02:44
Litfal: 我猜你的static裡面放的是config參數,請把他們的static 03/14 02:55
Litfal: 去掉,做成instance,然後用獨體模式來存取。 03/14 02:56
Litfal: 然後你不同執行續使用不同config的需求,只需要使用不同 03/14 02:57
Litfal: 的config instance,其他部分應該幾乎不用改 03/14 02:58
這部分我有想過,不過如果是使用獨體模式,在多執行緒下不是就同一筆資料了嗎? 不知道是不是我理解錯誤。 因為現在的資料必須在執行緒下生成與修改。 我已經想好其他發法解決了,但是還是想知道有沒有什麼好方法 ※ 編輯: autumnk (220.134.59.89), 03/14/2016 10:43:55 後來看了一下S大的內容,發覺我想到的方法和S大說得差不多 原來這叫DI注入,又學到了新東西^^,太感謝了。 ※ 編輯: autumnk (220.134.59.89), 03/14/2016 11:08:15
Litfal: 獨體模式是指你平常使用,實際上還是用instance而不是 03/14 16:48
Litfal: static field, 多執行續只需要改成各自new instance就好 03/14 16:49
了解,感謝你的解答 ※ 編輯: autumnk (220.134.59.89), 03/14/2016 18:10:53