享元模式(Flyweight Pattern)是一种结构型设计模式,它旨在减少对象的数量,通过共享已经存在的相似对象来减小内存占用和提高性能。享元模式适用于需要创建大量相似对象,但这些对象中的许多属性是可以共享的情况。
考虑一个简单的文本编辑器的例子,其中有大量字符对象。在享元模式中,我们将字符的外部状态(位置、颜色等)和内部状态(字符的本身)分开,并通过共享相同的字符实例来减小内存占用。
package main
import "fmt"
// Flyweight Interface
type Character interface {
Display() string
}
// ConcreteFlyweight
type ConcreteCharacter struct {
character rune
}
func NewConcreteCharacter(character rune) *ConcreteCharacter {
return &ConcreteCharacter{character: character}
}
func (c *ConcreteCharacter) Display() string {
return fmt.Sprintf("Character: %c", c.character)
}
// FlyweightFactory
type CharacterFactory struct {
characters map[rune]Character
}
func NewCharacterFactory() *CharacterFactory {
return &CharacterFactory{characters: make(map[rune]Character)}
}
func (cf *CharacterFactory) GetCharacter(character rune) Character {
if _, exists := cf.characters[character]; !exists {
cf.characters[character] = NewConcreteCharacter(character)
}
return cf.characters[character]
}
// Client
func main() {
characterFactory := NewCharacterFactory()
text := "ABCABD"
for _, char := range text {
flyweight := characterFactory.GetCharacter(char)
fmt.Println(flyweight.Display())
}
}
在这个示例中,ConcreteCharacter
表示具体的字符对象,CharacterFactory
是享元工厂,负责创建和管理字符对象。客户端通过享元工厂获取字符对象,并显示它们的内容。通过共享相同的字符实例,减小了内存占用。
我正在参与2024腾讯技术创作特训营第五期有奖征文,快来和我瓜分大奖!
声明:本作品采用署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)进行许可,使用时请注明出处。
blog: mengbin
Github: mengbin92
cnblogs: 恋水无意
腾讯云开发者社区:孟斯特
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。