(我發現這個例子在閱讀輕量級)
讓我們假設有一個叫戰士在遊戲中的對象,這個對象的不同通過它的位置只有
現在我的問題是
如果我對使用輕量級模式這個對象,我可能會要求在比賽中多次獲得一名士兵,我希望每個士兵都擁有自己的位置。
我該如何處理?輕量級設計模式如何維護不同的對象?
0
A
回答
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類(在這種情況下,重資源的位圖的一個實例)的一個實例,但你將有戰士類的潛在的幾個實例。該士兵不能'做任何事情',除非其提供訪問重資源數據...
相關問題
- 1. 易於維護CSS或輕量級HTML?
- 2. 如何輕量級設計模式可降低存儲器
- 3. 這個輕量級模式真的是輕量級模式嗎?
- 4. 設計模式 - 不同的對象,返回相同的對象
- 5. 可維護的設計模式建議
- 6. 同一個對象的重量級和輕量級版本
- 7. 輕量級對象的含義
- 8. 以不同方式從另一個對象創建對象的設計模式
- 9. 對象和對象元模式設計
- 10. 查詢對象模式(設計模式)
- 11. RESTful API設計:CRUD輕量級連接的最佳方式?
- 12. 輕量級AJAX對象建議?
- 13. 設計模式繪製單個對象的不同方法
- 14. 設計模式:在不同族的對象上應用行爲
- 15. Django維護模型對象的版本
- 16. 國家和輕量級模式
- 17. 輕量級jQuery倒計時
- 18. 使用輕量級模式共享位圖對象之間的位圖
- 19. 三ROME對象模型設計模式
- 20. 使用輕量級模式後visualvm保留大小相同
- 21. 如何將我的網頁設置爲CMS的維護模式?
- 22. 設計一個輕量級的會計應用程序
- 23. 如何維護序列化對象?
- 24. 我應該如何在Perl中維護我的對象模塊?
- 25. 是否有輕型和重型版本的對象的設計模式?
- 26. 設計模式:多態的對象
- 27. 設計模式:連接的對象池
- 28. 過濾對象的設計模式
- 29. actionscript中的對象池設計模式
- 30. 創建對象的設計模式
這可能是你的鏈接或可能有幫助:http://www.oodesign.com/flyweight-pattern-wargame-例如-java的sourcecode.html – 2012-01-08 13:58:34