技術問答
技術文章
iT 徵才
Tag
聊天室
2025 鐵人賽
登入/註冊
問答
文章
Tag
邦友
鐵人賽
搜尋
2022 iThome 鐵人賽
DAY
20
0
自我挑戰組
Ruby OOP to Oops !n 30
系列 第
20
篇
IT 邦鐵人賽 Day 20-Flyweight
14th鐵人賽
ruby
ruby on rails
k_sky369
2022-10-05 23:25:24
554 瀏覽
分享至
Flyweight(蠅量模式)
如果一個類別實例可以用來提供許多虛擬實例,那就使用蠅量模式。
簡言之:
多個物件共享同份狀態
情境:
五子棋遊戲
每個棋子都有標示位置的x與y以及顏色
問題:每個棋子實例都記錄著自己的狀態,而導致棋子一多時程式執行緩慢(因為內存不夠)
改善方法:只使用一個棋子實例,讓用戶端物件負責維護每個棋子的狀態
外在與內在狀態
起初設計
拆分
結果
適用情境:
生成大量相似的物件(導致內存耗盡)
對象內含有可抽取且其他對象也共享的重複狀態
好處:
減少執行期的物件數量,節省記憶體
將許多虛擬物件的狀態集中在一個位置
壞處:
類別內的每一個邏輯實例都沒辦法展現與別的實例不一樣的行為
Flyweight 與 Singleton的比較
Singleton只會有一個實體,Flyweight可以有多個
Singleton 物件的狀態為可變,而 Flyweight 物件(存放共通狀態的地方)為不可變
留言
追蹤
檢舉
上一篇
IT 邦鐵人賽 Day 19-Facade
系列文
Ruby OOP to Oops !n 30
共
20
篇
目錄
RSS系列文
訂閱系列文
2
人訂閱
16
IT 邦鐵人賽 Day 16 - Bridge
17
IT 邦鐵人賽 Day 17 - Composite
18
IT 邦鐵人賽 Day 18-Decorator
19
IT 邦鐵人賽 Day 19-Facade
20
IT 邦鐵人賽 Day 20-Flyweight
完整目錄
熱門推薦
{{ item.subject }}
{{ item.channelVendor }}
|
{{ item.webinarstarted }}
|
{{ formatDate(item.duration) }}
直播中
立即報名
尚未有邦友留言
立即登入留言
iThome鐵人賽
參賽組數
902
組
團體組數
37
組
累計文章數
19486
篇
完賽人數
530
人
看影片追技術
看更多
{{ item.subject }}
{{ item.channelVendor }}
|
{{ formatDate(item.duration) }}
直播中
熱門tag
看更多
15th鐵人賽
16th鐵人賽
13th鐵人賽
14th鐵人賽
17th鐵人賽
12th鐵人賽
11th鐵人賽
鐵人賽
2019鐵人賽
javascript
2018鐵人賽
python
2017鐵人賽
windows
php
c#
linux
windows server
css
react
熱門問題
【已解決】鐵人賽每天發表,還是一樣被斷賽了!?有人是一樣的嗎?
Windows 11 專業版 (筆電) 重灌
Win2008R2 AD無法派送印表機到 Win11 的電腦,可以用網域內的win11電腦部屬派送至其他成員電腦嗎?
Windows 2008 R2 AD無法派送印表機到 Window 11 的電腦
How to integrate an online electricity bill API on a website?
閱讀 [技術文章] 的需求建議~
google 試算表 App Scripts 問題
zimbra blocked using cblless.anti-spam.org.cn
OCS Inventory NG
熱門回答
Windows 2008 R2 AD無法派送印表機到 Window 11 的電腦
Windows 11 專業版 (筆電) 重灌
How to integrate an online electricity bill API on a website?
google 試算表 App Scripts 問題
Win2008R2 AD無法派送印表機到 Win11 的電腦,可以用網域內的win11電腦部屬派送至其他成員電腦嗎?
熱門文章
[為你自己學 n8n] 第 30 天,n8n 之我獨自備份 n8n!
[ Day 30 ] 資料專案的各式小撇步,私房秘訣大公開
Day 30 - 完賽總結:從 Canvas 到各式各樣的 Web API 之旅 🎉
資安入門與實務應用介紹 17:Windows 系統安全機制(UAC、BitLocker、Windows Update、Defender)
Day30 - 地獄之門,直達內核:Hell's Gate 的直接系統呼叫術(下)
IT邦幫忙
×
標記使用者
輸入對方的帳號或暱稱
Loading
找不到結果。
標記
{{ result.label }}
{{ result.account }}