模式定义

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

类图

应用场景

如果系统有大量类似的对象,可以使用享元模式

优点

如果系统有大量类似的对象,可以节省大量的内存及CPU资源

要点总结

要点总结

  • 如果系统有解耦实现对象的代价问题,Flyweight主要解决面向对象的代价问题,一般不触及面向对象的抽象性问题
  • Flyweight采用对象共享的做法来降低系统中对象的个数,从而降低细粒度对象给系统带来的内存压力。在具体实现方面,要注意对象状态的处理
  • 对象的数量太大从而导致对象内存开销加大–什么样的数量才算大?这需要我们仔细的根据具体应用情况进行评估,而不能凭空臆断

Go语言代码实现

工程目录

flyweight.go

package Flyweighttype 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
}

flyweight_test.go

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

设计模式--享元(Flyweight)模式相关推荐

  1. 设计模式学习笔记——享元(Flyweight)模式

    设计模式学习笔记--享元(Flyweight)模式 @(设计模式)[设计模式, 享元模式, flyweight] 设计模式学习笔记享元Flyweight模式 基本介绍 享元案例 类图 实现代码 Big ...

  2. Java 实现享元(Flyweight)模式

    /*** 字母* @author stone**/ public class Letter {private String name;public Letter(String name) {this. ...

  3. 设计模式学习笔记--享元(Flyweight)模式

    写在模式学习之前 什么是设计模式:在我们进行程序设计时,逐渐形成了一些典型问题和问题的解决方案,这就是软件模式:每一个模式描述了一个在我们程序设计中经常发生的问题,以及该问题的解决方案:当我们碰到模式 ...

  4. python 享元模式_python 设计模式之享元(Flyweight)模式

    #写在前面 这个设计模式理解起来很容易.百度百科上说的有点绕口. #享元模式的定义 运用共享技术来有効地支持大量细粒度对象的复用. 它通过共享已经存在的对橡大幅度减少需要创建的对象数量.避免大量相似类 ...

  5. java 地图模式_Java设计模式之从[Dota地图]分析享元(Flyweight)模式

    在Dota游戏的地图中有几百棵树,现在假设这些树木无非是这两种:白杨.枫树,数量一共为400棵,那么,在装载这个地图场景的时候,我们是不是应该给这400课树一一建立对象呢?(如:MapItem tre ...

  6. 设计模式(11)——享元(Flyweight)模式

    什么是享元模式? 享元模式跟CACHE机制类似,它运用共享技术有效地支持大量细粒度的对象.Flyweight通过尽可能地与其他对象共享数据来减少对内存的使用. Flyweight的经典例子就是字符处理 ...

  7. Java设计模式之享元flyweight模式代码示例

  8. Unity设计模式——享元模式(附代码)

    Unity设计模式--享元模式(附源码) 享元Flyweight模式是什么 享元模式是一种结构型设计模式, 它摒弃了在每个对象中保存所有数据的方式, 通过共享多个对象所共有的相同状态, 让你能在有限的 ...

  9. JAVA设计模式--享元模式

    目录 一.什么是享元模式 二.享元模式在Java中的典型应用 三.享元模式的结构 单纯享元模式 复合享元模式 四.享元模式应用举例 五.享元模式的适用性 六.享元模式的特点 七.总结 一.什么是享元模 ...

最新文章

  1. Spring源码分析【6】-ThreadLocal的使用和源码分析
  2. GATB的使用小例子test.cpp
  3. 处理南通一客户:Fortigate 310B Firmware丢失
  4. 【转】C#调用WebService实例和开发
  5. Halcon 学习总结——基于动态阈值法、GMM(高斯混合模型)、SVM(支持向量机)的网状物缺陷检测
  6. Debian从光盘apt-get
  7. Raki的读paper小记:LOOKING BACK ON LEARNED EXPERIENCES FOR CLASS/TASK INCREMENTAL LEARNING
  8. matlab做经济地理、地理距离、经济距离空间权重矩阵
  9. “冲击波”病毒的症状和解决方案
  10. 最新修复版微信H5漂流瓶V2.0更新版本 社交漂流瓶H5源码
  11. linux 防火墙开启80端口永久保存
  12. ENVI图像处理(1):ENVI影像处理基础
  13. [473]tf.nn.*()函数and tf.add()函数
  14. AOJ-AHU-OJ-675 定位赛
  15. 获取自己所上传资源的下载量
  16. MarkdownPad 2使用教程
  17. 普及下病毒性感冒和细菌性感冒的区别(如何看血常规)
  18. 【预测】中国2015年将陷入20年来最严重的失业潮和减薪潮!
  19. 不要问程序员什么是“对象”,也不要给他介绍“对象”
  20. eBPF(extended Berkeley Packet Filter):Linux系统最具颠覆性的“白盒测试”

热门文章

  1. 迷你世界支持服务器,迷你世界云服务器
  2. php 统计一周数据,如何获取本周、上周、本月、上个月数据的起止时间 PHP
  3. 数据中心建设提速 2021年呈四大发展趋势
  4. 阻燃防火电缆在数据中心建设中的应用
  5. VMware推出vRealize,全面加速数字化与混合云的迁移
  6. serializable接口_Java Serializable:明明就一个空的接口嘛
  7. HighNewTech之5G网络:带你了解5G网络的前世今生—两张长图帮你捋清思路
  8. Algorithm:C++语言实现之字符串相关算法(字符串的循环左移、字符串的全排列、带有同个字符的全排列、串匹配问题的BF算法和KMP算法)
  9. 成功解决连接SQL输出出现中文乱码问题(10001, 'oracle¿ìËÙÈëÃÅ', 'Íõº£ÁÁ', 'Ë®Àû³ö°æÉç',
  10. RocketMQ学习笔记(7)----RocketMQ的整体架构