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

Duk*_*uke 3 java encapsulation

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

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

您能否给我一个提示,客户代表选择是什么意思。提前谢谢了。

小智 6

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

例如,假设您有一个类,用于存储某个公司的员工。它可能是这样的:

public class Company {
    private List<Employee> employees;

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

    public Employee getEmployee(String employeeId) {
        //search for employee
    }
}
Run Code Online (Sandbox Code Playgroud)

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