Re:Re: [程式] Unity的Singleton Pattern實作-Instance

作者: gsyung (阿爾.克萊茵)   2017-09-12 20:25:00
身為在業界的老鳥,我也很贊同,不必設限該用則用,不該用則不用。但如果是剛入行的程式,我會建議多去試不用singleton的寫法,知道有不同的做法後,再來選擇用singleton,跟不思考就用,能獲得的成長是不一樣的。
※ 引述《cjcat2266 (CJ Cat)》之銘言:
: ※ 引述《littleshan (我正在想要換什麼)》之銘言:
: : 先感謝分享,但這邊提出一些不同的看法。
: : Singleton 本身並不會降低耦合,實際上它造成很強烈的耦合。
: 感謝分享,我也想要提出一些意見提供參考
: 剛踏入業界的時候,我也是非常小心地遵從教科書上的教誨
: 大部分 "缺點多" 或者 "不建議使用" 的系統設計方式一概不碰
: 與老鳥們合作一段時間之後,反而有不太一樣的見解
: 我們家的共識是,全域變數用起來心裡會有疙瘩,沒錯
: 但是當其方便性夠值得的時候,還是就安心用下去吧
: 當然,前提是得保有紀律,不落入教科書提及的眾多圈套中
: 我們在乎的方便性不單只是程式寫起來簡不簡潔
: 是否在debugger裡面的watch window能方便檢視也很重要
: 過去我有幾次提出不同重構singleton的方法
: 同事們往往都一語中的: "Good luck getting that in the watch window."
: 上篇推文有提到,不用singleton那manager類型的物件怎麼管理?
: 放在MainGame物件裡面? 那單一MainGame物件到頭來也是個singleton呀
: 追朔遊戲的最上層,總是會有某種形式的singleton存在
: 所以說要死都不用singleton又顯得有點綁手綁腳
: 如果硬是要只有MainGame這個類別才准許有singleton
: 其實對watch window稍微不太友善
: 首先要在watch window裡面輸入g_mainGame
: 然後要嘛要手動展開g_mainGame找到想要檢視的manager
: 要嘛得多存個g_mainGame.m_myManager在watch window
: 當MainGame規模變大、如此手續重複次數變多,watch window使用效率就下降了
: 又如果為了抽象性,還把眾多manager藏到的更神祕的地方
: 那在一個隨便的break point要去挖資料還得更費工夫
: 我們的做法是,manager類型的直接用全域變數沒關係
: 像是InputManager, NpcManager, ObjectManager
: 我們都直接用赤裸裸的全域變數g_inputMgr, g_npcMgr, g_objManager
: 好處是不管遊戲停在哪個break point
: 我要看NPC的清單,然後檢視特定NPC的資料
: 只要在watch window輸入g_npcMgr就好,不用從別的出發點爬過去
: + g_npcMgr
: |
作者: coolrobin (泳圈)   2017-09-12 21:10:00
說實話,其實你可以推文...
作者: dreamnook (亞龍)   2017-09-12 22:44:00
同意1F xD
作者: Schottky (順風相送)   2017-09-12 23:27:00
這字數大概要推到第四行了,我認為回文並無不妥
作者: chchwy (mat)   2017-09-13 18:47:00
贊成回文 之前GameDesign版推文成章的風氣太嚴重了
作者: cjcat2266 (CJ Cat)   2017-09-14 00:37:00
這樣說來好像也對喔
作者: grezod (grezod)   2017-10-05 02:52:00
夠精闢的觀念回文很好啊 推文反而容易被忽略

Links booklink

Contact Us: admin [ a t ] ucptt.com