设计模式--享元(Flyweight)模式
模式定义
运用共享技术有效地支持大量细粒度的对象
类图
应用场景
如果系统有大量类似的对象,可以使用享元模式
优点
如果系统有大量类似的对象,可以节省大量的内存及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)模式相关推荐
- 设计模式学习笔记——享元(Flyweight)模式
设计模式学习笔记--享元(Flyweight)模式 @(设计模式)[设计模式, 享元模式, flyweight] 设计模式学习笔记享元Flyweight模式 基本介绍 享元案例 类图 实现代码 Big ...
- Java 实现享元(Flyweight)模式
/*** 字母* @author stone**/ public class Letter {private String name;public Letter(String name) {this. ...
- 设计模式学习笔记--享元(Flyweight)模式
写在模式学习之前 什么是设计模式:在我们进行程序设计时,逐渐形成了一些典型问题和问题的解决方案,这就是软件模式:每一个模式描述了一个在我们程序设计中经常发生的问题,以及该问题的解决方案:当我们碰到模式 ...
- python 享元模式_python 设计模式之享元(Flyweight)模式
#写在前面 这个设计模式理解起来很容易.百度百科上说的有点绕口. #享元模式的定义 运用共享技术来有効地支持大量细粒度对象的复用. 它通过共享已经存在的对橡大幅度减少需要创建的对象数量.避免大量相似类 ...
- java 地图模式_Java设计模式之从[Dota地图]分析享元(Flyweight)模式
在Dota游戏的地图中有几百棵树,现在假设这些树木无非是这两种:白杨.枫树,数量一共为400棵,那么,在装载这个地图场景的时候,我们是不是应该给这400课树一一建立对象呢?(如:MapItem tre ...
- 设计模式(11)——享元(Flyweight)模式
什么是享元模式? 享元模式跟CACHE机制类似,它运用共享技术有效地支持大量细粒度的对象.Flyweight通过尽可能地与其他对象共享数据来减少对内存的使用. Flyweight的经典例子就是字符处理 ...
- Java设计模式之享元flyweight模式代码示例
- Unity设计模式——享元模式(附代码)
Unity设计模式--享元模式(附源码) 享元Flyweight模式是什么 享元模式是一种结构型设计模式, 它摒弃了在每个对象中保存所有数据的方式, 通过共享多个对象所共有的相同状态, 让你能在有限的 ...
- JAVA设计模式--享元模式
目录 一.什么是享元模式 二.享元模式在Java中的典型应用 三.享元模式的结构 单纯享元模式 复合享元模式 四.享元模式应用举例 五.享元模式的适用性 六.享元模式的特点 七.总结 一.什么是享元模 ...
最新文章
- Spring源码分析【6】-ThreadLocal的使用和源码分析
- GATB的使用小例子test.cpp
- 处理南通一客户:Fortigate 310B Firmware丢失
- 【转】C#调用WebService实例和开发
- Halcon 学习总结——基于动态阈值法、GMM(高斯混合模型)、SVM(支持向量机)的网状物缺陷检测
- Debian从光盘apt-get
- Raki的读paper小记:LOOKING BACK ON LEARNED EXPERIENCES FOR CLASS/TASK INCREMENTAL LEARNING
- matlab做经济地理、地理距离、经济距离空间权重矩阵
- “冲击波”病毒的症状和解决方案
- 最新修复版微信H5漂流瓶V2.0更新版本 社交漂流瓶H5源码
- linux 防火墙开启80端口永久保存
- ENVI图像处理(1):ENVI影像处理基础
- [473]tf.nn.*()函数and tf.add()函数
- AOJ-AHU-OJ-675 定位赛
- 获取自己所上传资源的下载量
- MarkdownPad 2使用教程
- 普及下病毒性感冒和细菌性感冒的区别(如何看血常规)
- 【预测】中国2015年将陷入20年来最严重的失业潮和减薪潮!
- 不要问程序员什么是“对象”,也不要给他介绍“对象”
- eBPF(extended Berkeley Packet Filter):Linux系统最具颠覆性的“白盒测试”
热门文章
- 迷你世界支持服务器,迷你世界云服务器
- php 统计一周数据,如何获取本周、上周、本月、上个月数据的起止时间 PHP
- 数据中心建设提速 2021年呈四大发展趋势
- 阻燃防火电缆在数据中心建设中的应用
- VMware推出vRealize,全面加速数字化与混合云的迁移
- serializable接口_Java Serializable:明明就一个空的接口嘛
- HighNewTech之5G网络:带你了解5G网络的前世今生—两张长图帮你捋清思路
- Algorithm:C++语言实现之字符串相关算法(字符串的循环左移、字符串的全排列、带有同个字符的全排列、串匹配问题的BF算法和KMP算法)
- 成功解决连接SQL输出出现中文乱码问题(10001, 'oracle¿ìËÙÈëÃÅ', 'Íõº£ÁÁ', 'Ë®Àû³ö°æÉç',
- RocketMQ学习笔记(7)----RocketMQ的整体架构