2012-01-08 37 views
0

(我發現這個例子在閱讀輕量級)
讓我們假設有一個叫戰士在遊戲中的對象,這個對象的不同通過它的位置只有
現在我的問題是
如果我對使用輕量級模式這個對象,我可能會要求在比賽中多次獲得一名士兵,我希望每個士兵都擁有自己的位置。
我該如何處理?輕量級設計模式如何維護不同的對象?

+2

這可能是你的鏈接或可能有幫助:http://www.oodesign.com/flyweight-pattern-wargame-例如-java的sourcecode.html – 2012-01-08 13:58:34

回答

1

如果所有士兵都包含一堆共享數據,輕量級設計模式將非常有用。例如讓我們說你有士兵和平民。每個人都有不同的maxHP,attackSpeed和傷害,但是所有的士兵都會分享這些屬性。在這種情況下,你可能會做:

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

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

會有UnitTemplate一個2個實例爲單位的士兵類型,一個是民用型單位。可以有任意數量的Unit實例,每個實例都可以指向士兵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類(在這種情況下,重資源的位圖的一個實例)的一個實例,但你將有戰士類的潛在的幾個實例。該士兵不能'做任何事情',除非其提供訪問重資源數據...