据我了解,享元模式的目的是通过共享通用的外部状态来减少内存占用并提高性能。为什么有人更愿意实现模式而不是将共享状态存储在静态字段中?
考虑以下示例:http ://www.oodesign.com/flyweight-pattern-wargame-example-java-sourcecode.html
如果我是对的,那么此示例中的重点是通过持有对单个 SoldierImp 对象的引用,在 SoldierClient 类的所有实例之间共享公共状态(soldierGraphicalRepresentation 对象)。
为什么我会为实现这个设计而烦恼?我很想按如下方式声明 SoldierClient 类:
public class SoldierClient implements Soldier
{
protected static Object soldierGraphicalRepresentation;
private int currentLocationX;
private int currentLocationY;
static SoldierImp()
{
soldierGraphicalRepresentation = LoadGraphicalRepresentation();
}
public void moveSoldier(int previousLocationX, int previousLocationY, int newLocationX, int newLocationY) {
// do stuff with the graphical representation
}
}
通过这种方式,SoilderClient 的所有实例共享对同一个 solderGraphicalRepresentation 对象的引用,从而实现了相同的目标。我错了吗?