【发布时间】:2013-02-23 13:49:26
【问题描述】:
据我了解,享元模式的目的是通过共享通用的外部状态来减少内存占用并提高性能。为什么有人更愿意实现模式而不是将共享状态存储在静态字段中?
考虑以下示例: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 对象的引用,从而实现了相同的目标。我错了吗?
【问题讨论】:
-
因为你有几个共享状态?我不确定我是否理解这个问题。您可能需要提供示例代码来说明您的意思。
标签: design-patterns flyweight-pattern