我熟悉封装的概念。但是,最近我发现了关于封装的以下声明(根据作者的说法正确):
封装有助于确保客户不依赖于表示的选择
您能不能给我一个暗示客户的含义以及代表选择的含义。非常感谢提前。
答案 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的结构,你决定重构代码。只要您提供了检索员工信息的方法,而不是直接访问“员工”结构,您可以更改这些功能的实现以适应您的类的新定义,而您的客户不会注意那些变化。