Flyweight模式与静态字段

Tam*_*aky 6 design-patterns flyweight-pattern

在我的理解中,flyweight模式的目的是通过共享共同的外在状态来减少内存占用并提高性能.为什么有人更愿意在静态字段中存储共享状态来实现模式?

请考虑以下示例: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

    }
}
Run Code Online (Sandbox Code Playgroud)

这样,SoilderClient的所有实例共享对同一个士兵图形表示对象的引用,并实现相同的目标.我错了吗?

JB *_*zet 10

模式的重点是,你可以让200名"大红色"士兵共享相同的"大红色"图形表示,300名"小蓝"士兵共享相同的"小蓝"图形表示等.如果你做图形表示静止的,所有的士兵都是一样的.

  • 然后每个士兵都会参考这个静态集合的一个图形表示.假设列表大小为5,士兵数量为1,000,000,那么你将有5个图形表示实例,而不是1,000,000个.这就是模式的重点. (3认同)