国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【設(shè)計模式】第13節(jié):結(jié)構(gòu)型模式之“享元模式”

這篇具有很好參考價值的文章主要介紹了【設(shè)計模式】第13節(jié):結(jié)構(gòu)型模式之“享元模式”。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

一、簡介

所謂“享元”,顧名思義就是被共享的單元。享元模式的意圖是復(fù)用對象,節(jié)省內(nèi)存,前提是享元對象是不可變對象。

實現(xiàn):通過工廠模式,在工廠類中,通過一個Map或者List來緩存已經(jīng)創(chuàng)建好的享元對象,以達(dá)到復(fù)用的目的。把實例的共享狀態(tài)和不共享狀態(tài)分開。

二、UML類圖

【設(shè)計模式】第13節(jié):結(jié)構(gòu)型模式之“享元模式”,設(shè)計模式,享元模式

三、案例

以下是畫圖器畫圓的場景,圓形只有黑色和紅色兩種,所以可以共享復(fù)用。

package main

import "fmt"

const (
	BLACK = 0
	RED   = 1
)

type CircleUnit struct {
	Color int
}

func NewCircleUnit(color int) CircleUnit {
	return CircleUnit{Color: color}
}

type CircleUnitFactory struct {
	CircleMap map[int]CircleUnit
}

func (cuf *CircleUnitFactory) Init() {
	blackCircle := NewCircleUnit(BLACK)
	redCircle := NewCircleUnit(RED)
	cuf.CircleMap = make(map[int]CircleUnit)
	cuf.CircleMap[blackCircle.Color] = blackCircle
	cuf.CircleMap[redCircle.Color] = redCircle
}

func (cuf *CircleUnitFactory) GetCircleUnit(color int) (CircleUnit, error) {
	cu, ok := cuf.CircleMap[color]
	if !ok {
		return cu, fmt.Errorf("color[%v] is not exist", color)
	}
	return cu, nil
}

type Circle struct {
	ID         int
	CircleUnit CircleUnit
	X          int
	Y          int
}

func NewCircle(id int, circleUnit CircleUnit, x, y int) Circle {
	circle := Circle{}
	circle.ID = id
	circle.CircleUnit = circleUnit
	circle.X = x
	circle.Y = y
	return circle
}

type DrawingBoard struct {
	CircleMap map[int]Circle
}

func (db *DrawingBoard) Init() {
	db.CircleMap = make(map[int]Circle)
}

func (db *DrawingBoard) Draw(circle Circle) {
	db.CircleMap[circle.ID] = circle
}

func (db *DrawingBoard) Show() {
	for k, v := range db.CircleMap {
		fmt.Printf("id: %v, color: %v, x: %v, y: %v\n", k, v.CircleUnit.Color, v.X, v.Y)
	}
}

func main() {
	circleUnitFactory := CircleUnitFactory{}
	circleUnitFactory.Init()
	drawingBoard := DrawingBoard{}
	drawingBoard.Init()

	black, _ := circleUnitFactory.GetCircleUnit(BLACK)
	red, _ := circleUnitFactory.GetCircleUnit(RED)
	drawingBoard.Draw(NewCircle(1, black, 1, 1))
	drawingBoard.Draw(NewCircle(2, red, 2, 2))
	drawingBoard.Draw(NewCircle(3, black, 3, 3))

	drawingBoard.Show()
}

四、對比

享元模式VS單例、緩存、對象池:應(yīng)用單例模式是為了保證對象全局唯一。應(yīng)用享元模式是為了實現(xiàn)對象復(fù)用,節(jié)省內(nèi)存。緩存是為了提高訪問效率,而非復(fù)用。池化技術(shù)中的“復(fù)用”理解為“重復(fù)使用”,主要是為了節(jié)省時間。文章來源地址http://www.zghlxwxcb.cn/news/detail-715329.html

到了這里,關(guān)于【設(shè)計模式】第13節(jié):結(jié)構(gòu)型模式之“享元模式”的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • [設(shè)計模式 Go實現(xiàn)] 結(jié)構(gòu)型~享元模式

    享元模式從對象中剝離出不發(fā)生改變且多個實例需要的重復(fù)數(shù)據(jù),獨立出一個享元,使多個對象共享,從而節(jié)省內(nèi)存以及減少對象數(shù)量。 flyweight.go flyweight_test.go

    2024年01月16日
    瀏覽(30)
  • 設(shè)計模式(十二):結(jié)構(gòu)型之享元模式

    設(shè)計模式(十二):結(jié)構(gòu)型之享元模式

    設(shè)計模式系列文章 設(shè)計模式(一):創(chuàng)建型之單例模式 設(shè)計模式(二、三):創(chuàng)建型之工廠方法和抽象工廠模式 設(shè)計模式(四):創(chuàng)建型之原型模式 設(shè)計模式(五):創(chuàng)建型之建造者模式 設(shè)計模式(六):結(jié)構(gòu)型之代理模式 設(shè)計模式(七):結(jié)構(gòu)型之適配器模式 設(shè)計模式(八):結(jié)構(gòu)型之裝

    2024年02月08日
    瀏覽(24)
  • 【十】設(shè)計模式~~~結(jié)構(gòu)型模式~~~享元模式(Java)

    【十】設(shè)計模式~~~結(jié)構(gòu)型模式~~~享元模式(Java)

    【學(xué)習(xí)難度:★★★★☆,使用頻率:★☆☆☆☆】 ????????面向?qū)ο蠹夹g(shù)可以很好地解決一些靈活性或可擴展性問題,但在很多情況下需要在系統(tǒng)中增加類和對象的個數(shù)。當(dāng)對象數(shù)量太多時,將導(dǎo)致運行代價過高,帶來性能下降等問題。 享元模式正是為解決這一類問題

    2024年02月08日
    瀏覽(25)
  • 【結(jié)構(gòu)型設(shè)計模式】C#設(shè)計模式之享元模式

    享元模式(Flyweight Pattern)是一種結(jié)構(gòu)型設(shè)計模式,旨在通過盡可能共享對象來減少內(nèi)存使用和提高性能。它將對象分為兩種類型:內(nèi)部狀態(tài)(Intrinsic State)和外部狀態(tài)(Extrinsic State)。內(nèi)部狀態(tài)是可以共享的,而外部狀態(tài)是獨立于享元對象的,并且在使用時需要注入。 使用

    2024年02月13日
    瀏覽(27)
  • 【Java 設(shè)計模式】結(jié)構(gòu)型之享元模式

    享元模式(Flyweight Pattern)是一種結(jié)構(gòu)型設(shè)計模式,它旨在減少對象的數(shù)量以節(jié)省內(nèi)存和提高性能。享元模式通過共享大量相似對象的狀態(tài),使得這些對象可以共享,而不需要在每個對象中都存儲相同的數(shù)據(jù)。在本文中,我們將深入研究Java中享元模式的定義、結(jié)構(gòu)、使用場景

    2024年01月22日
    瀏覽(30)
  • Java設(shè)計模式之結(jié)構(gòu)型-享元模式(UML類圖+案例分析)

    Java設(shè)計模式之結(jié)構(gòu)型-享元模式(UML類圖+案例分析)

    目錄 一、基本概念 二、UML類圖 三、角色設(shè)計 四、案例分析 4.1、基本實現(xiàn) 4.2、游戲角色 五、總結(jié) 享元模式是一種結(jié)構(gòu)型設(shè)計模式,主要用于減少創(chuàng)建大量相似對象所占用的內(nèi)存,它通過共享技術(shù)來有效支持大量細(xì)粒度的對象。 角色 描述 抽象享元角色 定義出對象的外部狀

    2024年02月16日
    瀏覽(26)
  • 設(shè)計模式--------結(jié)構(gòu)型模式

    設(shè)計模式--------結(jié)構(gòu)型模式

    結(jié)構(gòu)型模式描述如何將類或?qū)ο蟀茨撤N布局組成更大的結(jié)構(gòu)。它分為類結(jié)構(gòu)型模式和對象結(jié)構(gòu)型模式,前者采用繼承機制來組織接口和類,后者釆用組合或聚合來組合對象。 由于組合關(guān)系或聚合關(guān)系比繼承關(guān)系耦合度低,滿足“合成復(fù)用原則”,所以對象結(jié)構(gòu)型模式比類結(jié)構(gòu)

    2024年02月13日
    瀏覽(30)
  • 設(shè)計模式結(jié)構(gòu)型——外觀模式

    設(shè)計模式結(jié)構(gòu)型——外觀模式

    目錄 什么是外觀模式 外觀模式的實現(xiàn) 外觀模式角色 外觀模式舉例 外觀模式類圖 外觀模式代碼實現(xiàn) 外觀模式的特點 優(yōu)點 缺點 注意事項 應(yīng)用場景 總結(jié) ????????外觀模式(Facade Pattern):又叫作門面模式,歸屬于結(jié)構(gòu)型模式。外觀模式定義了提供了定義了一個統(tǒng)一的高層

    2024年02月16日
    瀏覽(25)
  • 結(jié)構(gòu)型設(shè)計模式——橋接模式

    結(jié)構(gòu)型設(shè)計模式——橋接模式

    橋接模式(Bridge pattern): 使用橋接模式通過將實現(xiàn)和抽象放在兩個不同的類層次中而使它們可以獨立改變。 橋接模式 (Bridge) 是一種結(jié)構(gòu)型設(shè)計模式, 可將 抽象 部分與 實現(xiàn) 部分 分離 ,使它們都可以獨立的變化。如果一個系統(tǒng)需要在構(gòu)件的抽象化角色和具體化角色之間增加更

    2024年02月07日
    瀏覽(34)
  • 結(jié)構(gòu)型設(shè)計模式——外觀模式

    結(jié)構(gòu)型設(shè)計模式——外觀模式

    有句話說這個世界就是個草臺班子,只不過排面做的好看而已,里面都是一包糠。這句話來形容外觀模式非常準(zhǔn)確,外觀模式又叫門面模式,顧名思義一個系統(tǒng)我不管你里面有多復(fù)雜有多少屎山代碼,我只要求你提供的接口好用,簡單就行,即門面要有排面!用專業(yè)的話講是

    2024年01月22日
    瀏覽(28)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包