- 作者:xiaoxiao
- 发表时间:2020-12-23 10:36
- 来源:未知
太多(Too many)
享元(Flyweight):太多对象(too many objects)
Flyweidht模式可能让人感到奇怪的一点是: 它(在其它模式的辅助下)是改善性能(performance hack)的一种方法。 通常来说比较好的做法就是简单的把系统里所有东西都弄成对象,但是有时候这样做会使得产生的对象数量非常巨大,这可能会导致系统过于缓慢或者内存耗尽。
Flyweight模式通过减少对象数量来解决这个问题。为了达到这个目的,需要外部化(externalize)原本属于对象一些数据,这样使得看起来对象的数量要比实际的多。但是,这同时也增加了应用这些对象时接口的复杂度,因为你必须传入额外的信息用以告诉调用方法如何找到那些外部化的信息。
作为一个非常简单的例子,考虑一个DataPoint对象,它包含一个int和float类型的数据成员,还有一个id数据成员用来表示对象编号。假设你需要创建一百万个这样的对象,然后对它们进行操作,像下面这样:
//: flyweight:ManyObjects.java
class DataPoint {
private static int count = 0;
private int id = count++;
private int i;
private float f;
public int getI() { return i; }
public void setI(int i) { this.i = i; }
public float getF() { return f; }
public void setF(float f) { this.f = f; }
public String toString() {
return "id: " + id + ", i = " + i + ", f = " + f;
}
}
public class ManyObjects {
static final int size = 1000000;
public static void main(String[] args) {
DataPoint[] array = new DataPoint[size];
for(int i = 0; i < array.length; i++)
array[i] = new DataPoint();