本文介绍: 享元模式是结构型模式中最简单的一个模式,享是共享的意思,元是最小单元或细小的对象的意思。也就是说对一些需要大量重复使用的很细的对象进行缓存,缓存了就可以重复使用,例如Integer类中对整型-128到127进行了缓存,使用的正是享元模式。它有点类似单例模式,不过单例模式只共享一个类的唯一对象,而享元模式是共享多个类的唯一对象。给出定义如下:运用共享技术来有效地支持大量细粒度对象的复用。它通过共享已经存在的对象来大幅度减少需要创建的对象数量、避免大量相似对象的开销,从而提高系统资源的利用率。
享元模式
享元模式是结构型模式中最简单的一个模式,享是共享的意思,元是最小单元或细小的对象的意思。也就是说对一些需要大量重复使用的很细的对象进行缓存,缓存了就可以重复使用,例如Integer类中对整型-128到127进行了缓存,使用的正是享元模式。它有点类似单例模式,不过单例模式只共享一个类的唯一对象,而享元模式是共享多个类的唯一对象。
给出定义如下:运用共享技术来有效地支持大量细粒度对象的复用。它通过共享已经存在的对象来大幅度减少需要创建的对象数量、避免大量相似对象的开销,从而提高系统资源的利用率。用大白话讲就是如果一个项目中有很多很细很小的对象,那么如果对象太多那么会导致JVM内存利用率低下,所以需要对这些很零散的小对象进行统一管理。
享元(Flyweight )模式中存在以下两种状态:
内部状态可以理解为对象固有的属性,不能改变,例如俄罗斯方块对象的shape属性,而外部状态是随环境而变化的,例如在不同游戏背景下方块的颜色不一样。因此,对于不变的属性是可以共享的,而变化的属性例如颜色是不可共享的,因为假设现在同时开启了两个不同背景的俄罗斯方块游戏,那么方块的颜色应该是不一样的。
享元模式的主要有以下角色:
案例:俄罗斯方块
俄罗斯方块这个游戏中,需要反复使用到有很多不同的方块(I型,L型,Z型等),每个不同的方块都是一个实例对象,这些对象就要占用很多的内存空间,如果每次出现对象都重新new一个,那么堆上占用的空间就会很多,这里还好俄罗斯方块也就不超过十种,如果是类似于类似于数字游戏的对象呢?每个数字都是一个对象实例,这里仅用俄罗斯方块利用享元模式进行实现。
代码实现
优点
缺点
使用场景
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。