對於一個小遊戲我想設計兩個類,它應該繪製我的單位。我有Unit
和Settler
類別,它擴展了Unit
。繼承類設計(Java)
畫他們我有類UnitView
和SettlerView
。
現在UnitView
有一個方法public void draw(Graphics g)
和SettlerView
應該使用相同的方法。這兩個階級的差異應該在於他們獲取信息以吸引該單位的方式。假設Units
總是藍色並且Settlers
具有取決於其健康的顏色(這將是Settler
中的字段,其中SettlerView
可以訪問)。
什麼是適當的方式來實現呢?我想要一個沒有像setColor
這樣的公共方法的乾淨設計。
編輯:這是我的第一種方法:
public class UnitView {
private Unit unit;
public Color color; // I don't want to make it public. Setting it private + getter/setter does not seem to be different to me.
private color calculateColor() { ...uses the information of unit... }
public void draw(Graphics g) { ...something using the Color... }
}
public class SettlerView extends UnitView {
private Settler settler;
private color calculateColor() { ...this method overides the one of UnitView.... }
}
我想利用多態性調用UnitView.draw。關鍵是公共領域Color。
成員變量的訪問器和增變器是封裝的關鍵,並且是乾淨設計的一部分。你不應該試圖避免它們。 – Borgleader
創建包含draw()方法的接口IView,具有UnitView和SettlerView實現的IView。在使用* View的任何地方,請使用IView界面。由於接口不能有字段,因此必須創建一個訪問方法getColor()並將其添加到IView接口。 – ryan0