簡體   English   中英

抽象類持有成員字段還是使用具體實現的Getter()?

[英]Abstract Class Hold Member Field or Use Getter() of Concrete Implementation?

我正在努力解決的一個 OOP 原則是抽象類及其保存成員字段(變量)的能力。

以以下代碼為例示例 1 ):

public abstract class AbstractClassConstructor {

    List mList;

    public AbstractClassConstructor(List list) {
        mList = list;
    }

    public Object getListRow(int row) {
        return mList.get(row);
    }
}

並請檢查此提供相同功能的替代代碼(示例 2 ):

public abstract class AbstractClassGetter {

    public abstract List getList();

    public Object getListRow(int row) {
        return getList().get(row);
    }
}

我還關心示例 1示例 2是否更易於維護,並且我想盡可能地遵循 OOP 標准。

目前,我在示例 1 中看到的耦合比在示例 2 中看到的更多,盡管我沒有看到很多其他問題。 然而,示例 2 更直接,我喜歡具體實現保存私有字段,而AbstractClassGetter使用一種方法來獲取它。 這感覺更好,但我正在努力應用正確的 OOP 原則來幫助我從這個角度了解哪個更好。

至於我,如果mList將在子類中使用mList的函數特定於其類型(例如 LinkedList 或 ArrayList),則示例 1將不理想。 這是因為在使用之前可能需要將其轉換為實際類型。 在這種情況下,示例 2會更好。

如果子類中不需要特定類型的函數,那么示例 1在封裝方面會更好。

更新

另一種可能被認為是中間立場的方法是使用泛型。

public abstract class AbstractClassConstructor<T extends List> {

    T mList;

    public AbstractClassConstructor(T list) {
        mList = list;
    }

    public Object getListRow(int row) {
        return mList.get(row);
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM