"封装有助于确保客户不依赖于表示的选择"

时间:2017-02-24 13:00:53

标签: java encapsulation

我熟悉封装的概念。但是,最近我发现了关于封装的以下声明(根据作者的说法正确):

封装有助于确保客户不依赖于表示的选择

您能不能给我一个暗示客户的含义以及代表选择的含义。非常感谢提前。

1 个答案:

答案 0 :(得分:4)

作者试图解释的是,封装允许您修改某些数据的内部表示,而不会对客户端产生任何副作用。客户端可以是使用您的任何其他类,以及您决定在类中存储数据的方式选择。

例如,假设您有一个类,您可以在其中存储某些公司的员工。它可能是这样的:

public class Company {
    private List<Employee> employees;

    public List<Employee> getEmployees() {
        return this.employees;
    }

    public Employee getEmployee(String employeeId) {
        //search for employee
    }
}

您将公司的员工存储在List中,并提供两种方法,一种检索所有员工,另一种检索给定的员工。有一天你意识到Set或Map可能是一个更好的存储Employees的结构,你决定重构代码。只要您提供了检索员工信息的方法,而不是直接访问“员工”结构,您可以更改这些功能的实现以适应您的类的新定义,而您的客户不会注意那些变化。