孟斌

1. 基本概念

享元模式(Flyweight Pattern)是一种结构型设计模式,它旨在减少对象的数量,通过共享已经存在的相似对象来减小内存占用和提高性能。享元模式适用于需要创建大量相似对象,但这些对象中的许多属性是可以共享的情况。

2. 适用场景

3. 优缺点

优点:

缺点:

4. 示例

考虑一个简单的文本编辑器的例子,其中有大量字符对象。在享元模式中,我们将字符的外部状态(位置、颜色等)和内部状态(字符的本身)分开,并通过共享相同的字符实例来减小内存占用。

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是享元工厂,负责创建和管理字符对象。客户端通过享元工厂获取字符对象,并显示它们的内容。通过共享相同的字符实例,减小了内存占用。


孟斯特

声明:本作品采用署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)进行许可,使用时请注明出处。

Author: mengbin

blog: mengbin

Github: mengbin92

cnblogs: 恋水无意

腾讯云开发者社区:孟斯特