我正在研究一款名爲Tank的遊戲。每個坦克都有一個叫做TankParameters
的對象。 TankParameter
包括坦克的速度,旋轉速度和健康。更多實現或非抽象類的抽象類?
目前我的計劃是製作TankParameters
課堂摘要並通過TankParameters
課程的不同執行到Tank
課程。假設我將有一個名爲LightTankParameters
的實現,它將相應地設置屬性。或者我可能有一個HeavyTankParameters
,它將相應地設置屬性。
現在我的問題是,而不是讓我們說創建如此多的類擴展TankParameters
將TankParameters
作爲非抽象類,並有一個構造函數用提供的值設置變量或它將更好地保留爲不同的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;
......
}
問題不在於效率而在於設計。保留一個抽象Tankparameter並有不同的實現會更好。由於不同的實現,如果添加某些參數,您不必在Heavy parm – Kode
中不必要地使用它。設置屬性的最佳方法是從外部來源(例如屬性文件),這使得它更容易更改他們進行測試或甚至在生產中。另外,如果您有一個難以構建的類,因爲構造函數會有很多參數,其中一些是可選的,您可能需要查看[Builder模式](https://en.wikipedia.org/維基/ Builder_pattern)。 – biziclop
我認爲最好不要使用'TankParameter'並且只有不同類型的'Tank'。 – markspace