2013-02-19 90 views
0

我不是那麼好的OO設計..所以請忍受我..2個孩子班裏的同班同學和同班同學..?

我有A類和2類延伸A.但他們都有相同的領域..所以有什麼更好的,以在A中有getter/setter或者在兩個子類中都有相同的getter/setter。或者有更好的方法來做到這一點..?

這是我做了(模擬)..

class A{ 

    private int x; 

    protected A(int x){ 
    this.x = x; 
    } 

    public static A createA(id a, int x){ 
    switch(a){ 
    case 0: 
    return new C(x); 
    break; 
    //so on 

    } 


    public int getX(){ 
    return x; 
    } 

    } 

謝謝..

+10

如果它們是完全一樣的,而且將是A的所有子類一樣,你應該把它移動到以避免代碼重複。 – assylias 2013-02-19 13:48:02

+2

當提問有關代碼的問題時,最好顯示您有問題的代碼。 – 2013-02-19 13:50:21

+0

@assylias ..我想做一個**工廠模式**(我不知道如果是模式名稱)..只是使靜態方法來創建這些對象,並使A類的構造函數受到保護..我應該繼續做它..? – ngesh 2013-02-19 13:51:56

回答

2

這取決於類

如果這些屬性是A的屬性然後是, 如果只是偶然他們有相同的屬性,那麼沒有。

基本上,你需要問自己的問題是,會不會有一個類擴展A,不需要這些屬性。

如果答案是否定的,把它們放在A,

如果答案是肯定的,讓他們的子類, 或在這些子類2之間創建另一個抽象類,具有這些2家酒店。

+0

嘿謝謝..我會這樣做.. – ngesh 2013-02-19 14:00:11

1

假設你的課程是A(父母)和BC(子女)。你說BC有一些相同的字段。

問問自己:如果您有另外一類D,孩子A,它是否也有這些字段,而不管它的具體功能如何?

  • 如果答案是肯定的,那麼這些領域的兩個子類的存在絕對不是巧合,那麼你或許應該在A定義它們,因爲這意味着他們有這些成員,正是因爲他們繼承A

  • 如果答案是否定的,這些子類在子類中的存在可能是也可能不是巧合。所以,你應該問自己:即使D沒有這些字段,它們在BC中的存在看起來不僅僅是巧合嗎?這些課程是否分享DA的另一個孩子,根本不會分享?

    • 如果是的話,再考慮一類新E擴展A,與E定義這些成員共同然後使E代替ABC孩子。

    • 如果不是(如果它看起來像只是一個巧合),然後離開你的結構。或者考慮一個接口。