私の理解では、フライウェイトパターンの目的は、共通の外部状態を共有することにより、メモリフットプリントを減らし、パフォーマンスを向上させることです。共有状態を静的フィールドに格納するよりもパターンを実装することを好むのはなぜですか?
次の例を考えてみましょう: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のすべてのインスタンスが、同じsoldierGraphicalRepresentationオブジェクトへの参照を共有し、同じ目標が達成されます。私が間違っている?