2012-09-12 196 views
0

對於一個小遊戲我想設計兩個類,它應該繪製我的單位。我有UnitSettler類別,它擴展了Unit繼承類設計(Java)

畫他們我有類UnitViewSettlerView

現在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。

+1

成員變量的訪問器和增變器是封裝的關鍵,並且是乾淨設計的一部分。你不應該試圖避免它們。 – Borgleader

+0

創建包含draw()方法的接口IView,具有UnitView和SettlerView實現的IView。在使用* View的任何地方,請使用IView界面。由於接口不能有字段,因此必須創建一個訪問方法getColor()並將其添加到IView接口。 – ryan0

回答

0

您始終可以重寫父級繪製方法。

因此,例如,如果父類的方法是

public void draw(Graphic g){ 
    g.setColor(blue); 
} 

子類將有

@Override 
public void draw(Graphic g){   
    if (this.health > 50){ 
     g.setColor(green); 
    }else{ 
     g.setColor(red); 
    } 
    super.draw(g); // if you want to call the parent draw and just change color 
} 
+0

感謝您的回答。假設draw(Graphic g)是一個複雜的函數,我想使用父類實現,因爲只有顏色發生了變化。 – Elrond1337

+0

在子畫中使用super.draw繪製 –

+0

但是它如何知道變化的顏色呢? – Elrond1337