2012-01-08 4 views
0


이의 게임 군인이라는 객체가 있다고 가정하자 (플라이급을 읽는 동안 나는이 예제를 발견)하고 위치입니다하여이 개체가 다른 경우에만
전에서 플라이급 패턴을 사용 해요 경우 지금은 내 질문에
입니다 이 객체는 게임 중에 병사를 여러 번 구해달라고 요청할 수 있습니다. 각 병사가 자신의 위치를 ​​갖기를 바랍니다.
어떻게 처리 할 수 ​​있습니까?플라이 웨이트 디자인 패턴이 다른 오브젝트를 유지하는 방법은 무엇입니까?

+2

이것은 귀하의 링크이거나 도움이 될 수 있습니다 : http://www.oodesign.com/flyweight-pattern-wargame- example-java-sourcecode.html –

답변

1

플라이급 디자인 패턴은 모든 병사가 공유 데이터를 많이 포함하는 경우 유용합니다. 예를 들어 군인과 민간인이 있다고 가정 해 보겠습니다. 각각에는 다른 maxHP, attackSpeed ​​및 damage가 있지만 모든 병사는 이러한 특성을 공유합니다. 이 경우 당신은 할 수 있습니다

class UnitTemplate { 
    String name; 
    int maxHP; 
    int attackSpeed; 
    int damage; 
} 

class Unit{ 
    UnitTemplate template; 
    int x; 
    int y; 
} 

단위의 민간 유형의 군인 장치의 유형과 하나 UnitTemplate 하나의 2 개 인스턴스가있을 것입니다. 유닛 인스턴스는 여러 개일 수 있으며, 유닛 인스턴스는 군인 UnitTemplate 또는 민간 UnitTemplate을 가리킬 수 있습니다.

3

그래, 나는 patheros에 동의한다. 그러나 Flyweight pattern을 사용하려는 인센티브가 인센티브로 몇 가지 추가 클래스 구조를 필요로하지 않는다는 것을 지적하고 싶다. 인센티브는 플라이급 패턴을 사용하면 일반/무거운 리소스의 사용을 최소화한다는 것입니다.

모든 병사가 동일한 그래픽 표현을 사용한다고 가정합니다. 그래픽 데이터를 인스턴스화하는 각 병사 (구현의 일반적인 '무거운'측면)보다는 모든 병사가 공유하는 하나의 '템플릿'객체를 만듭니다.

class SharedSoldierData { 
    /** UI representation, big, and common to all. */ 
    byte[] bitmap; 
} 

class Soldier { 
    int x,y; 

    void doMovement(SharedSoldierData extraData) { 
    // In order to move, I need the 'UI' information (a bitmap), which must be provided to me. 
    } 
} 

// example usage: 
SharedSoldierData soldierType = new SharedSoldierData(...); // setup with the soldiers bitmap 
Soldier soldier1 = new Soldier(); 
Soldier soldier2 = new Soldier(); 

// modify the solider x/y locations as the game progresses... 

soldier1.doMovement(soldierType); // move soldier 1 
soldier2.doMovement(soldierType); // ditto for soldier 2. 

에서만 SharedSoldierData 클래스 (이 경우 무거운 리소스 비트 맵의 ​​인스턴스)의 한 인스턴스있을 것입니다,하지만 당신은 군인 클래스의 잠재적으로 여러 인스턴스를 가질 것입니다. 군인은 무거운 자원 데이터에 대한 액세스를 제공하지 않으면 아무것도 할 수 없습니다 ...

관련 문제