Golang设计模式——16享元模式

简介: Golang设计模式——16享元模式

享元模式

定义

运用共享技术有效的支持大量细颗粒度的对象

优点

  1. 它可以极大减少内存中对象的数量,使得相同对象或相似对象在内存中只保存一份
  2. 享元模式的外部状态相对独立,而且不会影响其内部状态,从而使得享元对象可以在不同的环境中被共享

缺点

  1. 享元模式使得系统更加复杂,需要分离出内部状态和外部状态,这使得程序的逻辑复杂化
  2. 为了使对象可以共享,享元模式需要将享元对象的状态外部化,而读取外部状态使得运行时间变长

场景

如果一个应用程序使用了大量的对象,而大量的这些对象造成了很大的存储开销时就应该考虑使用,还有就是对象的大多数状态可以给外部状态,如果删除对象的外部状态,那么可以用相对较少的共享对象取代很多组对象,此时可以考虑使用享元模式

代码

package FlyWeight
type 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
}


package FlyWeight
import "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"])
}

其他设计模式

设计模式Git源代码

00简单工厂模式

01工厂方法模式

02抽象工厂模式

03外观模式

04建造者模式

05桥接模式

06命令模式

07迭代器模式

08模板模式

09访问者模式

10备忘录模式

11责任链模式

12中介模式

13原型模式

14状态模式

15策略模式

16享元模式

17组合模式

18解释器模式

19单例模式

20适配器模式

21代理模式

22装饰器模式

23观察者模式


目录
相关文章
|
8月前
|
设计模式 存储 Java
23种设计模式,享元模式的概念优缺点以及JAVA代码举例
【4月更文挑战第6天】享元模式(Flyweight Pattern)是一种结构型设计模式,旨在通过共享技术有效地支持大量细粒度对象的重用。这个模式在处理大量对象时非常有用,特别是当这些对象中的许多实例实际上可以共享相同的状态时,从而可以减少内存占用,提高程序效率
119 4
|
8月前
|
设计模式
二十三种设计模式全面解析-组合模式与享元模式的结合应用:实现对象的共享和高效管理
二十三种设计模式全面解析-组合模式与享元模式的结合应用:实现对象的共享和高效管理
|
4月前
|
设计模式 Java
Java设计模式-享元模式(12)
Java设计模式-享元模式(12)
|
5月前
|
设计模式 存储 Java
【十】设计模式~~~结构型模式~~~享元模式(Java)
文章详细介绍了享元模式(Flyweight Pattern),这是一种对象结构型模式,通过共享技术实现大量细粒度对象的重用,区分内部状态和外部状态来减少内存中对象的数量,提高系统性能。通过围棋棋子的设计案例,展示了享元模式的动机、定义、结构、优点、缺点以及适用场景,并探讨了单纯享元模式和复合享元模式以及与其他模式的联用。
【十】设计模式~~~结构型模式~~~享元模式(Java)
|
6月前
|
设计模式 存储 JavaScript
js设计模式【详解】—— 享元模式
js设计模式【详解】—— 享元模式
76 6
|
7月前
|
设计模式 缓存 Java
Java设计模式:享元模式实现高效对象共享与内存优化(十一)
Java设计模式:享元模式实现高效对象共享与内存优化(十一)
|
7月前
|
设计模式 存储 Java
Java设计模式之享元模式详解
Java设计模式之享元模式详解
|
7月前
|
设计模式
享元模式-大话设计模式
享元模式-大话设计模式
|
8月前
|
设计模式 Go
[设计模式 Go实现] 结构型~享元模式
[设计模式 Go实现] 结构型~享元模式
|
8月前
|
设计模式 存储 Java
小谈设计模式(27)—享元模式
小谈设计模式(27)—享元模式
下一篇
开通oss服务