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