关于创建ADT时的表示泄露
作者:互联网
java是一个典型的面向对象的语言,而在解决面向对象的相关问题时,我们姑且可以认为ADT是解决问题的基本单元。一个ADT的基本属性便是immutable或mutable,与这个属性密切相关的便是笔者将要谈到的表示泄露的问题。
不妨先说immutable的ADT,既然是immutable,便是在创建完实例后便不能修改,尤其是不能被外部修改,因此我们要做到的最基本的便是在该ADT的RI中定义为private,不然若是public便能轻易的被外界调用,甚至修改,这显然对我们的程序是不安全的,应当杜绝。当然若是加上final的修饰自然更好。加上private后,外部程序想要得知一些值只能使用相应的obsever方法,返回相应的值。好,到这里我们又有了需要考虑的事情,如果需要得知的是String,int这种本身是immutable的便罢,但万一是List,Set,Map这种,我们就需要格外注意了,因为他们本身是mutable的,当我们一时没注意在observer方法中直接返回了他们的话,那外部程序便能随意对其进行修改了,这同样应当杜绝。为了避免这种情况发生,我们便需要返回一个“副本”,即是所谓的防御式拷贝,通过创建一个mutable RI的副本,然后observer方法再返回这个副本,便能到达避免表示泄露的问题。
再来说mutable的ADT,因为是mutable,自然不会像immutable那样要求那么严格,但是,如果要对其进行相应的修改操作,必须通过ADT内部的方法来实现,同样也要通过上述所说的防御式拷贝来避免程序中可能出现的隐患。
标签:返回,ADT,副本,创建,修改,mutable,泄露,immutable 来源: https://www.cnblogs.com/shiinamashiro/p/16350098.html