2015-10-15 117 views
0

我正在研究一款名爲Tank的遊戲。每個坦克都有一個叫做TankParameters的對象。 TankParameter包括坦克的速度,旋轉速度和健康。更多實現或非抽象類的抽象類?

目前我的計劃是製作TankParameters課堂摘要並通過TankParameters課程的不同執行到Tank課程。假設我將有一個名爲LightTankParameters的實現,它將相應地設置屬性。或者我可能有一個HeavyTankParameters,它將相應地設置屬性。

現在我的問題是,而不是讓我們說創建如此多的類擴展TankParametersTankParameters作爲非抽象類,並有一個構造函數用提供的值設置變量或它將更好地保留爲不同的TankParameters類型創建類。

我在問這個問題,因爲我可能會在遊戲中添加功能,以便人們可以修改他們的坦克並因此修改坦克參數。

此外,如果有更多的實現是更好的又是什麼設置變量

一個更好的方式是不是

public class LightTankParameters extends TankParameters{ 

    private static final int MAX_HEALTH = 100; 

    public LightTankParameters() { 
     super(MAX_HEALTH); 
    } 
} 

OR

public class LightTankParameters extends TankParameters{ 

    public LightTankParameters() { 
     super(100); 
    } 
} 

這裏是我的TankParameters類

public abstract class TankParameters { 
    /** 
    * Max health of the tank 
    */ 
    protected int maxHealth; 
...... 
} 
+1

問題不在於效率而在於設計。保留一個抽象Tankparameter並有不同的實現會更好。由於不同的實現,如果添加某些參數,您不必在Heavy parm – Kode

+0

中不必要地使用它。設置屬性的最佳方法是從外部來源(例如屬性文件),這使得它更容易更改他們進行測試或甚至在生產中。另外,如果您有一個難以構建的類,因爲構造函數會有很多參數,其中一些是可選的,您可能需要查看[Builder模式](https://en.wikipedia.org/維基/ Builder_pattern)。 – biziclop

+0

我認爲最好不要使用'TankParameter'並且只有不同類型的'Tank'。 – markspace

回答

3

我相信這是創造性設計模式Creational design patterns的工作。聽起來就像你需要多個單一接口的實現。基於你有什麼解釋這聽起來像Factory Patterns之一將爲你工作(這應該審查另一種創作模式可能會更好地爲你像Builder啪嗒啪嗒效果)。難以指定確切的創作模式,而無法全面瞭解整個設置。我會建議看看不同的創作設計模式,並看看哪個最適合您的設置。

+0

這就是我會遵循的策略。沒有必要讓你的代碼更加複雜,增加這個額外的繼承層就是說你正在創建一個具有不同參數的坦克。 使用一個工廠,讓它的方法名稱足夠明確地說明你生產的不同種類的坦克。 –