Art*_*ald 5 java oop encapsulation
我想知道在什么情况下你使用封装.这个问题的目的是协作.因此,当主题被封装时,请随意分享您自己的经验.
一些场景:
计算财产
public class Order {
private List<ListItem> listItems = new ArrayList<ListItem>();
public double getTotal() {
double total = 0;
for(ListItem listItem: listItems)
total += listItem.getQuantity() * listItem.getPropduct().getPrice();
return total;
}
}
Run Code Online (Sandbox Code Playgroud)
自我验证域对象
public class Person {
private String name;
public void setName(String name) {
if(StringUtils.isBlank(name)) {
throw new NotEmptyException("name", name);
}
this.name = name;
}
}
Run Code Online (Sandbox Code Playgroud)
对某些特殊行为使用其他类
public class Person {
private MutableInt id = new MutableInt();
/**
* Integer itself is immutable
*/
public Integer getId() {
retur id.intValue();
}
}
Run Code Online (Sandbox Code Playgroud)
转变
public class Person {
public String enabled;
public boolean isEnabled() {
return "Y".equals(enabled);
}
}
Run Code Online (Sandbox Code Playgroud)
简而言之,我更喜欢在我设计/实现的所有非私有 API 中使用强封装。
习惯上不使用强封装的唯一情况是私有嵌套类(并且需要)只不过是代用struct
声明。我的理由是,私有类通过嵌套和私有而得到了充分的封装。
如果这样做有令人信服的性能原因,我也准备放松封装(稍微)。当复制内部数组/集合的成本过高时,这种放松通常包括泄漏内部数组/集合。而且这样做总是让我感觉不舒服......
归档时间: |
|
查看次数: |
1546 次 |
最近记录: |