封装原则倡导通过隐藏实现细节和封装变化还实现关注点分离。违反了封装原则会导致封装性缺陷。下图展示了封装原则的实现方法和相对应的封装型缺陷。
下面详细说明这四种封装型缺陷。
不充分的封装 缺陷
【概念定义】对于抽象的成员,声明的访问权限超过了实际需要的权限,会导致不充分的封装缺陷
【违反原则】违反了封装原则,依赖倒转原则
【缺陷实例】类中声明的公有字段,如System.in和System.out;极端情况是存在一些全局的变量和数据结构(public static)。
【重构建议】将类中的字段修改成私有的,并提供共有的访问器方法。这样客户的程序只依赖于接口,而不依赖于具体的实现。
泄漏的封装 缺陷
【概念定义】抽象通过公有接口暴露了底层的实现细节,会导致以后的修改升级变得困难,同时使得客户程序直接可以修改内部状态。导致了泄漏的封装缺陷。
【违反原则】封装原则
【缺陷实例】对于某应用,用于存放待排序对象的ArrayList底层数据结构,提供公有方法getList()直接返回底层的list,使客户可以直接修改该array list。
【重构建议】不要向客户放回内部数据结构的指针。可以考虑返回内部数据结构的深层克隆或者一个不可修改的对象。对上例而言,