结构型模式(1)——享元模式
当系统有大量的重复对象时可以考虑利用享元模式,把对象的外部状态(我理解就是易变的属性,相反的就是内部状态,就是不变的属性,可以理解为对象的共性)剥离出来,作为引用对象。
假设有一个系统中有一些彩色矩形对象,已知颜色种类是有限的,就像下面的代码:
class rect{
private Color color;
private int x;
private int y;
}
很显然,如果当前系统有100个红色矩形对象,那么就会有100个相同红色color字段,这相当于浪费了99个color的内存空间,于是乎,我们可以把color对象抽离出来,做成单例模式,让rect对象直接引用就成了。
前段日子朋友给我讲解了这个模式在实际开发中的应用,他例举了游戏场景中的森林,游戏中的森林是由许多的树对象组成的。
树的模型
如果每一颗树都完整的存一遍,是会消耗很多内存空间的,实际上,树对象可以简单理解为由纹理、模型还有坐标构成。
class Tree{
private Texture texture;
private Model model;
private int x;
private int y;
}
不同纹理会让物体有不同的外观
朋友说,纹理其实就是一张图片,所以游戏引擎只需要每一种纹理保存一份就行了,之后每一个用到该纹理的对象都会去使用它,这其实就是用了享元模式。
总结一下,享元模式就是通过分离对象中的共性和个性,或者说内部状态与外部状态,来达到复用对象,节省空间消耗的目的。(共性或者说内部状态是指对象那些可以被共性的属性,是不会随着场景轻易改变的,如纹理或者模型;个性或者说外部状态是指对象不可以被共享的属性,是随着场景而改变的,如坐标。)

浙公网安备 33010602011771号