第十八条:尽量使用不可变对象
设计类的时候,应充分运用属性来封装数据。
在使用属性时,则可将其声明为“只读”。
默认情况下,属性是“既可读又可写的”,这样设计出来的类都是“可变的”(mutable)。
不过一般情况下,我们要建模的数据未必需要改变。
所以,一般情况下,对外公开的接口一般声明为readOnly。
也可以在类内部实现重新声明为readwrite,这样可以在类内部修改参数。
这样,就只能在类的实现代码内部设置这些属性了。
其实准确的说,在对象外部,可以通过“键值编码”(KVC)技术设置这些属性的值。
【要点】
尽量创建不可变的对象。
若某属性仅可于对象内部修改,则在“class-continuation分类”中将其由readonly属性扩展为readwrite属性。
不要把可变的collection作为属性公开,而应提供相关方法,以此修改对象中的可变collection。
网友评论