设计模式--享元(Flyweight)模式
生活随笔
收集整理的這篇文章主要介紹了
设计模式--享元(Flyweight)模式
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
模式定義
運(yùn)用共享技術(shù)有效地支持大量細(xì)粒度的對(duì)象
類圖
應(yīng)用場(chǎng)景
如果系統(tǒng)有大量類似的對(duì)象,可以使用享元模式
優(yōu)點(diǎn)
如果系統(tǒng)有大量類似的對(duì)象,可以節(jié)省大量的內(nèi)存及CPU資源
要點(diǎn)總結(jié)
要點(diǎn)總結(jié)
- 如果系統(tǒng)有解耦實(shí)現(xiàn)對(duì)象的代價(jià)問題,Flyweight主要解決面向?qū)ο蟮拇鷥r(jià)問題,一般不觸及面向?qū)ο蟮某橄笮詥栴}
- Flyweight采用對(duì)象共享的做法來降低系統(tǒng)中對(duì)象的個(gè)數(shù),從而降低細(xì)粒度對(duì)象給系統(tǒng)帶來的內(nèi)存壓力。在具體實(shí)現(xiàn)方面,要注意對(duì)象狀態(tài)的處理
- 對(duì)象的數(shù)量太大從而導(dǎo)致對(duì)象內(nèi)存開銷加大–什么樣的數(shù)量才算大?這需要我們仔細(xì)的根據(jù)具體應(yīng)用情況進(jìn)行評(píng)估,而不能憑空臆斷
Go語言代碼實(shí)現(xiàn)
工程目錄
flyweight.go
package Flyweighttype FlyWeight struct {Name string }func NewFlyWeight (name string) *FlyWeight{return &FlyWeight{Name: name} }type FlyWeightFactory struct {pool map[string]*FlyWeight }func NewFlyWeightFactory() *FlyWeightFactory {return &FlyWeightFactory{pool: make(map[string]*FlyWeight)} }func (f *FlyWeightFactory) GetFlyWeight (name string) *FlyWeight {weight, ok := f.pool[name]if !ok {weight = NewFlyWeight(name)f.pool[name] = weight}return weight }flyweight_test.go
package Flyweightimport "testing" import "github.com/stretchr/testify/assert"func TestFlyWeightFactory_GetFlyWeight(t *testing.T) {factory := NewFlyWeightFactory()hong := factory.GetFlyWeight("hong beauty")xiang := factory.GetFlyWeight("xiang beauty")assert.Len(t, factory.pool, 2)assert.Equal(t, hong, factory.pool["hong beauty"])assert.Equal(t, xiang, factory.pool["xiang beauty"]) } 《新程序員》:云原生和全面數(shù)字化實(shí)踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀總結(jié)
以上是生活随笔為你收集整理的设计模式--享元(Flyweight)模式的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 设计模式--原型(Prototype)模
- 下一篇: 设计模式--门面(Facade)模式