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 可能是存储员工的更好结构,因此您决定重构代码。只要您提供了检索员工信息的方法,而不是直接访问“员工”结构,您就可以更改这些函数的实现以适应您的类的新定义,而您的客户不会注意这些变化。