表示独立性:客户端使用ADT时无需考虑也不应知道更不应该直接访问其内部实现,ADT内部表示的变化不应影响外部spec与客户端。
表示泄露:如果ADT不幸地让客户端得到了自己内部表示可变对象的引用,那么客户端就可以不通过ADT的操作,而可以通过非法后门修改ADT的内部表示,产生表示泄露。
如何避免表示泄露:
1、所有字段都使用private,这是最基本的最起码的保护方式。
2、防御式拷贝,例如用getCharArray返回rep的拷贝,又例如用Arrays.copyOf(rep,rep.length)返回一个新对象的引用,而不能直接返回rep,还有给rep赋值时也应注意不能直接把传入的可变对象引用赋值给rep。