假设我有一个A类,它有一个相关元素列表(元素类型不相关):
public class A {
private List<String> list;
public List<String> getList() {
return list;
}
public void addElement(String element) {
list.add(element);
}
}
Run Code Online (Sandbox Code Playgroud)
现在我希望从另一个类Client访问此列表.我需要添加一个新元素.从设计的角度来看,问题是一个更具哲学性的问题.
public class Client {
private A a = new A();
public void method1() {
a.getList().add("");
}
public void method2() {
a.addElement("");
}
}
Run Code Online (Sandbox Code Playgroud)
如果有人能指出任何这些方法的任何优势,将不胜感激.谢谢.
通常你的getList()方法被认为是不好的风格.如果类A返回对其实际的引用List,则调用者可能会调用clear()该列表,或者向其添加一百万个元素,或者知道什么是全部.这是一个更好的主意,只有一个返回Iterator,或者只有一个只读视图List使用Collections.unmodifiableList().
这意味着你的解决方案2,addElement()更好; 该addElement()方法可能包含验证添加元素,限制列表大小等的代码.并且clear()无法访问.
如果你的意图是真正公开列表,method2通常是更好的OOP风格.(因为通过使用method2你将获得addAll免费等.)
标准API中此模式的示例:
文档应该注意说像对象由返回的集合支持,因此修改将...
缺点是通过公开允许客户做的列表remove等等,所以如果您打算只收集项目,add那么method1可能仍然是更好的选择.
标准API中此模式的示例:
| 归档时间: |
|
| 查看次数: |
1025 次 |
| 最近记录: |