设计模式--享元(Flyweight)模式
生活随笔
收集整理的這篇文章主要介紹了
设计模式--享元(Flyweight)模式
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
模式定義
運用共享技術有效地支持大量細粒度的對象
類圖
應用場景
如果系統有大量類似的對象,可以使用享元模式
優點
如果系統有大量類似的對象,可以節省大量的內存及CPU資源
要點總結
要點總結
- 如果系統有解耦實現對象的代價問題,Flyweight主要解決面向對象的代價問題,一般不觸及面向對象的抽象性問題
- Flyweight采用對象共享的做法來降低系統中對象的個數,從而降低細粒度對象給系統帶來的內存壓力。在具體實現方面,要注意對象狀態的處理
- 對象的數量太大從而導致對象內存開銷加大–什么樣的數量才算大?這需要我們仔細的根據具體應用情況進行評估,而不能憑空臆斷
Go語言代碼實現
工程目錄
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"]) } 《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀總結
以上是生活随笔為你收集整理的设计模式--享元(Flyweight)模式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 设计模式--原型(Prototype)模
- 下一篇: 设计模式--门面(Facade)模式