前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >设计模式之享元模式

设计模式之享元模式

原创
作者头像
孟斯特
发布2024-02-01 10:57:10
990
发布2024-02-01 10:57:10
举报
文章被收录于专栏:code人生

1. 基本概念

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

2. 适用场景

  • 当一个应用程序使用了大量相似对象,而这些对象占用大量内存时。
  • 当对象中有可共享的状态,而这些状态对于应用程序而言是相对稳定的。
  • 当创建新对象的代价较高,可以通过共享已有对象来减小创建的数量。

3. 优缺点

优点:

  • 减小内存占用: 通过共享相似对象的状态,减小了内存占用,提高了系统性能。
  • 提高性能: 由于共享了对象,减少了创建对象的数量,提高了系统性能。
  • 分离内部状态和外部状态: 将对象的状态分为内部状态和外部状态,内部状态可以被共享,而外部状态可以根据需要在运行时传递。

缺点:

  • 引入共享状态可能导致线程安全问题: 如果多个线程同时修改共享的状态,可能会引发线程安全问题,需要在使用时考虑线程安全。

4. 示例

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

代码语言:go
复制
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 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 基本概念
  • 2. 适用场景
  • 3. 优缺点
    • 优点:
      • 缺点:
      • 4. 示例
      相关产品与服务
      云开发 CloudBase
      云开发(Tencent CloudBase,TCB)是腾讯云提供的云原生一体化开发环境和工具平台,为200万+企业和开发者提供高可用、自动弹性扩缩的后端云服务,可用于云端一体化开发多种端应用(小程序、公众号、Web 应用等),避免了应用开发过程中繁琐的服务器搭建及运维,开发者可以专注于业务逻辑的实现,开发门槛更低,效率更高。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档