[英]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.