2011-10-18 2 views
0

플라이급 샘플 코드 http://www.oodesign.com/flyweight-pattern-wargame-example-java-sourcecode.html을 살펴보고 정적 인스턴스 (위의 사이트에서 SOLDIER)를 정적이 아닌 병사에게 할당 할 때 실제로 작동하는 방법이 궁금합니다. 예를 들어 SoldierClient에 우리가 실제로 각각의 SoldierClientSOLDIER의 사본을 보유 할 것이기 때문에 객체 크기를 줄이는 지 여부는 각 SoldierClient 개체에서 발생합니까?정적 인스턴스를 플라이 웨이트 패턴에 정적으로 할당하기

편집 : 방법에

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 
    } 

답변

3

SoldierClient복사본을 SOLDIER를 보유하지 않으며, 그것은 기준을SoldierClient동일한SOLDIER에 대한 참조를 보유하고있는 모든 SOLDIER에 및 를 보유하고있다.

각 병사의 위치 SoldierClient 인스턴스 (currentLocationXcurrentLocationY 속성)에서 개최 편집 응답

. 이러한 속성에 대한 코드 주석뿐만 아니라 그것을 밖으로 철자 : "이 상태는 클라이언트에 의해 유지된다"(즉, "이 상태는 SoldierImp 인스턴스에서 유지되지 않습니다").

모든 것이 moveSoldier의 매개 변수에 있습니다. SoldierImp 인스턴스 상태가 없습니다. 그것을 정적 유틸리티 방법과 같이 생각하십시오. 좌표는 SoldierClient 인스턴스에서 제공됩니다. 그들은 SoldierImp에 의해 저장되지 않습니다. - 그냥 사용되었습니다.

+0

+1 볼 수 있지만 내 혼란이 여기에 우리가 참조의 속성을 변경하면되고, 그것은 또한 정적 대응에 반영해야하지만,이 경우에는 그렇지 않습니다? – coder9

+0

@ coder9 링크하는 코드는 절대 참조의 속성을 변경하지 않습니다. 사실 참조 *에는 속성이 없습니다. –

+0

위와 같이 편집 한 질문입니다. 감사합니다 – coder9

1

이 문서는 언급으로 :

이 솔루션은 공유 객체

군인의 일반적인 상태를 유지하는 것입니다 정말 모든 SolderClient이 병사를 참조하지 사본을 가지고 있습니다. 모든에서 변수 군인 군인는 모든 클라이언트에 대해 동일 하나의 객체 개미에 referencig됩니다 SolderClient. 플라이급 패턴은 싱글 톤 패턴을 사용하기 때문에

어쩌면 당신은 먼저 확인할 수 있습니다

http://www.oodesign.com/singleton-pattern.html

1

각 SoldierClient 인스턴스는 군인 객체에 참조 있습니다. 이 경우 모두 동일한 인스턴스를 가리 킵니다. SoldierFactory를 호출 할 때마다 동일한 Soldier 객체가 반환됨을 알 수 있습니다. 한 군인의 생성자 만 호출됩니다.

Singleton

관련 문제