Я просматривал пример кода Flyweight на http://www.oodesign.com/flyweight-pattern-wargame-example-java-sourcecode.html и удивлялся, как он действительно работает, когда мы присваиваем статический экземпляр (SOLDIER
, как на приведенном выше сайте) экземпляру нестатического солдата в SoldierClient
действительно ли мы уменьшаем размер объекта, так как каждый SoldierClient
будет каким-то образом содержать копию SOLDIER
экземпляра в каждом SoldierClient
объекте, который мы создаем?
EDIT:
В методе moveSoldier()
там написано
// удалить представление солдата из предыдущего местоположения
// затем отобразить представление солдата в новом месте
Почему это не влияет на всеобъекты, созданные в классе WarGame
package flyweight;
public class SoldierImp implements Soldier {
/**
* Intrinsic State maintained by flyweight implementation
* Solider Shape ( graphical represetation)
* how to display the soldier is up to the flyweight implementation
*/
private Object soldierGraphicalRepresentation;
/**
* Note that this method accepts soldier location
* Soldier Location is Extrinsic and no reference to previous location
* or new location is maintained inside the flyweight implementation
*/
public void moveSoldier(int previousLocationX, int previousLocationY,
int newLocationX, int newLocationY) {
// delete soldier representation from previous location
// then render soldier representation in new location
}