設計模式入門:享元模式 Flyweight Pattern

閱讀時間約 2 分鐘

你有沒有玩過大型多人線上遊戲(MMO)?畫面上常常出現數百甚至數千名玩家,每個人都有不同的外觀和裝備。這時你有沒有想過,遊戲是怎麼在記憶體不爆炸的情況下管理這麼多角色的?其中一個祕密就是「享元模式」!


什麼是享元模式?

享元模式是一種設計模式,專門用來解決當系統中有大量相似物件時,如何有效減少記憶體佔用。這個模式的核心概念是,對那些物件中「重複」的部分進行共享,而不是每個物件都完整地複製一份。這樣一來系統可以更輕巧高效地運作。


我們來打個比方,想像你在開發一個繪圖應用程式,畫布上有數千個圓形。雖然每個圓的大小、顏色、位置都不同,但它們的形狀是一樣的。這時,你就可以使用享元模式,把「圓形的基本形狀」這部分共用起來,而只針對顏色、大小和位置進行變化。


現實中的應用

享元模式廣泛應用於像遊戲引擎、圖形處理和文字處理等場景。例如,當我們在遊戲裡看到成千上萬的樹木、建築物或角色,實際上這些物件很可能都是共享了某些相同的資料,只是表現上看起來不一樣。


享元模式的優缺點

享元模式最大的優點就是「節省記憶體」。當系統需要處理大量相似物件時,這種模式可以顯著減少不必要的資源消耗,提升效能。但這種模式也有挑戰,因為它要求你將物件的內部狀態(可以共享的部分)與外部狀態(不可共享的部分)分開管理,這對開發者來說可能會增加一些複雜度。


總結一下,享元模式是一種強大且實用的設計模式,特別是在那些需要大量相似物件的場景中,例如遊戲開發、繪圖應用程式等。透過合理地共享物件的內部資源,它可以讓系統運行得更加順暢,效能也更好。雖然這個模式不會讓你的程式飛起來,但它絕對能減少負擔,讓一切運行得更輕巧!


補充一下,享元(Flyweight)這個術語源自拳擊界,在拳擊比賽中 Flyweight 指的是一個較輕量級(57kg以下)的選手級別。這個詞在設計模式中被借用,是因為享元模式的核心理念與輕量的概念相吻合:目的是減輕系統的記憶體負擔,讓程式變得更「輕」,更高效。


想更深入了解設計模式嗎?我在iThome鐵人賽的文章會是一個不錯的參考。
https://ithelp.ithome.com.tw/articles/10350632

    4會員
    71內容數
    對於經營自媒體、部落格或社群媒體感興趣?我專注於提供實用的寫作技巧、數位行銷策略,以及個人成長建議。 每週,我會分享提升寫作技巧、優化部落格經營、有效管理社群媒體、以及投資理財的寶貴知識。追蹤我,獲得實用的工具和建議,讓你的個人品牌和財務管理更上一層樓!
    留言0
    查看全部
    發表第一個留言支持創作者!
    ShengYu的沙龍 的其他內容
    大家有沒有想過,當你在終端機輸入指令,或是用正則表達式進行搜尋時,背後的運作原理是什麼?這些操作看似複雜,但其實背後隱藏著一個叫做「解釋器模式」的設計模式,今天就來聊聊這個神奇的模式。 什麼是解釋器模式? 簡單來說解釋器模式是一種用來處理語法規則的設計模式。它的運作方式就像我們學習一門語言,
    想像一下你家裡的電視遙控器。這個遙控器能夠控制不同品牌的電視,無論是開機、關機還是調整音量,它都能輕鬆搞定。遙控器就像是橋接不同電視的中介,讓你只需要按下按鈕,就能控制電視,而不用擔心每台電視的內部細節。這就是橋接模式的精髓:把「操作」和「具體實現」分開,讓它們可以獨立發展。 什麼是橋接模式?
    想像一下你在公司遇到一個棘手的問題。你會怎麼做?通常的做法是先跟你的主管報告,發現他解決不了,就再往上報告給更高層的主管,如果還是解決不了就再往上報告給更高層,這樣層層往上,直到有人可以處理為止。這就是「責任鏈模式」的概念,將任務一步步傳遞,直到問題被解決。 什麼是責任鏈模式? 責任鏈模式是
    你有沒有曾經正在玩一個遊戲,剛剛過了一個超難的關卡,但突然手滑點錯選項,整個進度被重置了?這時候你一定會希望有個「存檔」功能,能讓你回到之前的關卡。這正是備忘錄模式 Memento Pattern 想解決的問題。 備忘錄模式讓我們能夠保存某個物件的狀態,並在需要時還原這些狀態,像是一個「後悔藥
    在開發大型系統時,常常會發現各個物件之間的溝通愈來愈複雜,像是編織成了一張複雜的蜘蛛網。每個物件相互依賴,任何改動都可能牽一髮而動全身。這時候中介者模式就能幫助我們化繁為簡,成為一個「協調者」,讓物件之間的溝通變得簡單清晰。 什麼是中介者模式? 中介者模式是一種行為型設計模式,它讓物件之間的
    你有沒有遇過這樣的情況:需要一個接一個地處理某個集合裡的東西,但又不想去理解它內部是如何儲存的?就像你讀書時,只要翻頁閱讀,不用去管書的裝訂方式。這就是迭代器模式要解決的問題。 什麼是迭代器模式? 迭代器模式就是提供了一個統一的方式來遍歷集合中的元素,而不必暴露集合的內部結構。這很像你在看一
    大家有沒有想過,當你在終端機輸入指令,或是用正則表達式進行搜尋時,背後的運作原理是什麼?這些操作看似複雜,但其實背後隱藏著一個叫做「解釋器模式」的設計模式,今天就來聊聊這個神奇的模式。 什麼是解釋器模式? 簡單來說解釋器模式是一種用來處理語法規則的設計模式。它的運作方式就像我們學習一門語言,
    想像一下你家裡的電視遙控器。這個遙控器能夠控制不同品牌的電視,無論是開機、關機還是調整音量,它都能輕鬆搞定。遙控器就像是橋接不同電視的中介,讓你只需要按下按鈕,就能控制電視,而不用擔心每台電視的內部細節。這就是橋接模式的精髓:把「操作」和「具體實現」分開,讓它們可以獨立發展。 什麼是橋接模式?
    想像一下你在公司遇到一個棘手的問題。你會怎麼做?通常的做法是先跟你的主管報告,發現他解決不了,就再往上報告給更高層的主管,如果還是解決不了就再往上報告給更高層,這樣層層往上,直到有人可以處理為止。這就是「責任鏈模式」的概念,將任務一步步傳遞,直到問題被解決。 什麼是責任鏈模式? 責任鏈模式是
    你有沒有曾經正在玩一個遊戲,剛剛過了一個超難的關卡,但突然手滑點錯選項,整個進度被重置了?這時候你一定會希望有個「存檔」功能,能讓你回到之前的關卡。這正是備忘錄模式 Memento Pattern 想解決的問題。 備忘錄模式讓我們能夠保存某個物件的狀態,並在需要時還原這些狀態,像是一個「後悔藥
    在開發大型系統時,常常會發現各個物件之間的溝通愈來愈複雜,像是編織成了一張複雜的蜘蛛網。每個物件相互依賴,任何改動都可能牽一髮而動全身。這時候中介者模式就能幫助我們化繁為簡,成為一個「協調者」,讓物件之間的溝通變得簡單清晰。 什麼是中介者模式? 中介者模式是一種行為型設計模式,它讓物件之間的
    你有沒有遇過這樣的情況:需要一個接一個地處理某個集合裡的東西,但又不想去理解它內部是如何儲存的?就像你讀書時,只要翻頁閱讀,不用去管書的裝訂方式。這就是迭代器模式要解決的問題。 什麼是迭代器模式? 迭代器模式就是提供了一個統一的方式來遍歷集合中的元素,而不必暴露集合的內部結構。這很像你在看一
    你可能也想看
    Thumbnail
    1.加權指數與櫃買指數 週五的加權指數在非農就業數據開出來後,雖稍微低於預期,但指數仍向上噴出,在美股開盤後於21500形成一個爆量假突破後急轉直下,就一路收至最低。 台股方面走勢需觀察週一在斷頭潮出現後,週二或週三開始有無買單進場支撐,在沒有明確的反轉訊號形成前,小夥伴盡量不要貿然抄底,或是追空
    Thumbnail
    近期的「貼文發佈流程 & 版型大更新」功能大家使用了嗎? 新版式整體視覺上「更加凸顯圖片」,為了搭配這次的更新,我們推出首次貼文策展 ❤️ 使用貼文功能並完成這次的指定任務,還有機會獲得富士即可拍,讓你的美好回憶都可以用即可拍珍藏!
    Thumbnail
    https://www.youtube.com/watch?v=0L2OgNQDzTc 之前看了啾啾鞋這部影片,裡面說退坑一款手遊,也說到一些觀念,就如下圖這樣
    Thumbnail
    介紹一個優質的遊戲知識部落格:遊戲設計中藥鋪,其中「Game Design 資源分享表」十分推薦遊戲開發者閱讀。另外提到Gamker攻壳是一個專業的遊戲評鑑頻道,其深入的評論幫助作者入坑《健身環大冒險》。作者在後記也分享了自己在遊戲開發上的經歷和挑戰。
    Thumbnail
    遊戲產業似乎從很久以前,各種玩法的類型都已經確立了下來。現在新出品的遊戲,更像是已有玩法機制的排列組合、重新包裝。比起遊戲本身,遊戲公司更願意把創意放在有明確衡量標準的部分,如:劇情、音樂、特效…等。久而久之,人們對遊戲的評價越來越取決於美術、故事等決定表現力的指標...
    Thumbnail
    一個獨立開發者,立志打造顛覆性的遊戲體驗,在開拓全新玩法的道路上,砥礪前行。 大家好,我正在開發一款獨立遊戲,以魔法戰鬥為主題,如果想要嘗試遊戲的demo,歡迎到下方連結處,加入我的Discord群組。 魔法與戰鬥的世界---開發中的遊戲   這款遊戲發生在一個飄浮於雲端之上的世界,
    Thumbnail
    覺得是需要來記錄一下,輸出才是好的整理學習的方式! 也能檢視一下整個過程! 這是個透過各式主題,讓大家,尤其是很少接觸的人,知道桌遊原來有這麼多面向,引起更多人的興趣! 老早就討論好了很多桌遊主題,但這次還是有了基本的遊戲問題,以前都是曝光度的問題XD。 那到底是怎樣的問題,差點讓活動變得2
    Thumbnail
      遊戲將以不破壞遊戲體驗的情況下分析,避免劇透。因本文為求職遊戲企劃時所寫分析,故以遊戲企劃之角度撰寫文章,程式及美術僅簡易分析及解構。備註:後記有雷,如果有需要請避開。
    Thumbnail
    一、了解思維 二、大量體驗 三、拆解架構 四、找出樂趣
    Thumbnail
    1.加權指數與櫃買指數 週五的加權指數在非農就業數據開出來後,雖稍微低於預期,但指數仍向上噴出,在美股開盤後於21500形成一個爆量假突破後急轉直下,就一路收至最低。 台股方面走勢需觀察週一在斷頭潮出現後,週二或週三開始有無買單進場支撐,在沒有明確的反轉訊號形成前,小夥伴盡量不要貿然抄底,或是追空
    Thumbnail
    近期的「貼文發佈流程 & 版型大更新」功能大家使用了嗎? 新版式整體視覺上「更加凸顯圖片」,為了搭配這次的更新,我們推出首次貼文策展 ❤️ 使用貼文功能並完成這次的指定任務,還有機會獲得富士即可拍,讓你的美好回憶都可以用即可拍珍藏!
    Thumbnail
    https://www.youtube.com/watch?v=0L2OgNQDzTc 之前看了啾啾鞋這部影片,裡面說退坑一款手遊,也說到一些觀念,就如下圖這樣
    Thumbnail
    介紹一個優質的遊戲知識部落格:遊戲設計中藥鋪,其中「Game Design 資源分享表」十分推薦遊戲開發者閱讀。另外提到Gamker攻壳是一個專業的遊戲評鑑頻道,其深入的評論幫助作者入坑《健身環大冒險》。作者在後記也分享了自己在遊戲開發上的經歷和挑戰。
    Thumbnail
    遊戲產業似乎從很久以前,各種玩法的類型都已經確立了下來。現在新出品的遊戲,更像是已有玩法機制的排列組合、重新包裝。比起遊戲本身,遊戲公司更願意把創意放在有明確衡量標準的部分,如:劇情、音樂、特效…等。久而久之,人們對遊戲的評價越來越取決於美術、故事等決定表現力的指標...
    Thumbnail
    一個獨立開發者,立志打造顛覆性的遊戲體驗,在開拓全新玩法的道路上,砥礪前行。 大家好,我正在開發一款獨立遊戲,以魔法戰鬥為主題,如果想要嘗試遊戲的demo,歡迎到下方連結處,加入我的Discord群組。 魔法與戰鬥的世界---開發中的遊戲   這款遊戲發生在一個飄浮於雲端之上的世界,
    Thumbnail
    覺得是需要來記錄一下,輸出才是好的整理學習的方式! 也能檢視一下整個過程! 這是個透過各式主題,讓大家,尤其是很少接觸的人,知道桌遊原來有這麼多面向,引起更多人的興趣! 老早就討論好了很多桌遊主題,但這次還是有了基本的遊戲問題,以前都是曝光度的問題XD。 那到底是怎樣的問題,差點讓活動變得2
    Thumbnail
      遊戲將以不破壞遊戲體驗的情況下分析,避免劇透。因本文為求職遊戲企劃時所寫分析,故以遊戲企劃之角度撰寫文章,程式及美術僅簡易分析及解構。備註:後記有雷,如果有需要請避開。
    Thumbnail
    一、了解思維 二、大量體驗 三、拆解架構 四、找出樂趣