2015-06-24 83 views
3

我有兩個類A和B.現在,我有B "has a" A的關係。所以,這裏最重要的事情是構圖模式。現在,B的一個領域是A的一個對象。問題是A和B的一些領域是常見的。所以,在這種情況下,這些字段將是多餘的。我無法從常用字段中創建抽象類,並使A和B繼承它,因爲它們已經擴展了一些抽象類。這種情況下最好的做法是什麼?避免構圖模式中的冗餘java

+0

你說B可能有也可能沒有A.只有當B有效的A時,這些字段纔是多餘的。 – KDM

+0

B幾乎總是有一個相應的A.兩者都有一個公共字段,它實際上是一個文件位置,它們的值始終相同。 –

+0

對不起,很迂腐。它幾乎總是或永遠? – KDM

回答

3

如果A和B不能有共同的基類,那麼不能將通用字段放在這樣的類中。以避免冗餘

的一種方式是創建一個包含A和B的共同字段中的第三類C,並讓A和B都具有類C.

這種重新分解的構件會只有當共同領域作爲一個單獨的類別是有意義的(即該類別代表一些真實的生活對象或概念,而不僅僅是一組任意的領域)時纔有意義。否則,我會保留冗餘字段。

例如,OfficePerson可能不會有一個共同的基類(超過Object等),但假設它們都有如街道名稱,城市,郵編,等等......你可以將屬性很容易看到這些字段應該被提取到一個Address類。

0

正如你說,你的A和B類已經擴展了一個抽象類,你可以嘗試委託共同領域與非公共功能來區分它

例如

class B extends AbstractB { 
    private String myField; 
    public String getMyField(){ 
      return myField; 
    } 
} 

class A extends AbstractA { 
    private String myField; 
    private B b; 
    public A(B b){ 
     this.b = b; 
    } 
    public String getMyField(){ 
      return myField; 
    } 
    public String getMyBField(){ 
      return b.myField; 
    } 
}