我有兩個類A和B.現在,我有B "has a" A
的關係。所以,這裏最重要的事情是構圖模式。現在,B的一個領域是A的一個對象。問題是A和B的一些領域是常見的。所以,在這種情況下,這些字段將是多餘的。我無法從常用字段中創建抽象類,並使A和B繼承它,因爲它們已經擴展了一些抽象類。這種情況下最好的做法是什麼?避免構圖模式中的冗餘java
3
A
回答
3
如果A和B不能有共同的基類,那麼不能將通用字段放在這樣的類中。以避免冗餘
的一種方式是創建一個包含A和B的共同字段中的第三類C,並讓A和B都具有類C.
這種重新分解的構件會只有當共同領域作爲一個單獨的類別是有意義的(即該類別代表一些真實的生活對象或概念,而不僅僅是一組任意的領域)時纔有意義。否則,我會保留冗餘字段。
例如,Office
和Person
可能不會有一個共同的基類(超過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;
}
}
相關問題
- 1. VB.NET:避免冗餘
- 2. 如何避免Java中的構造器代碼冗餘?
- 3. 避免數據冗餘
- 4. 避免冗餘在Python
- 5. 避免翻新POJO冗餘
- 6. 通過避免冗餘
- 7. 避免佈局冗餘
- 8. 避免冗餘異步calcluations
- 9. 如何避免冗餘和冗長的if-else結構?
- 10. 如何避免數據庫模型中的冗餘?
- 11. 避免在此列表理解冗餘
- 12. 如何避免在angularjs冗餘變量
- 13. 避免與capistrano多級擴展冗餘
- 14. 使用LINQ避免冗餘Enumerable全部
- 15. 替代項目以避免冗餘
- 16. 模型和部分模型,如何避免冗餘代碼?
- 17. Java:使用SnakeYaml時如何避免噪聲冗餘?
- 18. Haskell:模式匹配冗餘
- 19. 冗餘模式匹配
- 20. 如何避免子類中的默認初始參數冗餘?
- 21. 如何避免java.net.URI中的冗餘雙重編碼?
- 22. 如何避免異步JavaScript中的冗餘代碼?
- 23. 避免朋友表中的數據冗餘
- 24. 如何避免Sqlite數據庫中的冗餘?
- 25. 如何避免MEF中的冗餘進口?
- 26. 如何避免客戶端驗證中的冗餘條件?
- 27. 如何避免文檔評論中的冗餘?
- 28. MVC視圖模型冗餘
- 29. 模式中的冗餘轉義字符
- 30. Java JDBC在寫入數據庫的方法中避免冗餘代碼?
你說B可能有也可能沒有A.只有當B有效的A時,這些字段纔是多餘的。 – KDM
B幾乎總是有一個相應的A.兩者都有一個公共字段,它實際上是一個文件位置,它們的值始終相同。 –
對不起,很迂腐。它幾乎總是或永遠? – KDM