在哪些场景中你使用封装?

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)

Ste*_*n C 4

简而言之,我更喜欢在我设计/实现的所有非私有 API 中使用强封装。

习惯上不使用强封装的唯一情况是私有嵌套类(并且需要)只不过是代用struct声明。我的理由是,私有类通过嵌套和私有而得到了充分的封装。

如果这样做有令人信服的性能原因,我也准备放松封装(稍微)。当复制内部数组/集合的成本过高时,这种放松通常包括泄漏内部数组/集合。而且这样做总是让我感觉不舒服......