场景.首先来看一个简单的类:
package designpattern.flyweight;
public class Tree {
private int xCoord;
private int yCoord;
private int age;
public void display() {
System.out.println("Position is (" + xCoord + " , " + yCoord + " , age is " + age + ".");
}
public int getxCoord() {
return xCoord;
}
public void setxCoord(int xCoord) {
this.xCoord = xCoord;
}
public int getyCoord() {
return yCoord;
}
public void setyCoord(int yCoord) {
this.yCoord = yCoord;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
当你要使用该类时,便会实例化一个该类的对象,如果需要实例化的数量过多,则会消耗很多内存?如何解决这个问题呢?
解决办法:使用蝇量模式
package designpattern.flyweight;
public class FlyweightTree {
public static void display(int xCoord, int yCoord, int age) {
System.out.println("Position is (" + xCoord + " , " + yCoord + ") , age is " + age + ".");
}
}
package designpattern.flyweight;
public class TreeManager {
int[][] treeArray = {{1,2,10},{1,2,10},{1,2,10}};
public void displayTree() {
for (int i = 0; i < treeArray.length; i++) {
FlyweightTree.display(treeArray[i][0], treeArray[i][1], treeArray[i][2]);
}
}
public static void main(String[] args) {
TreeManager t = new TreeManager();
t.displayTree();
}
}
蝇量模式:只用一个树实例和一个客户对象来维护”所有“树的 状态。
当一个类有许多的实例,而这些实例能被同一方法控制的时候,我们便可以使用蝇量模式
优点:
减少运行时对象实例的个数,节省内存;
将许多”虚拟“对象的状态集中管理;
缺点:
一旦你实现了它,那么单个的逻辑实例将无法拥有独立而不同的实现。
参考:Head First 设计模式。