[Thinking] 为什么要使用getter/setter
成员变量须私有化,是面向对象基本思想之一。
几乎每本讲到面向对象编程的书里,都会告诉读者“类的成员变量一定要定义为私有的(private)”
变量私有化的好处
1. 在setter中可以加入合法性检查,比如设置颜色的函数中,对于RGB颜色要判断其值在0~255之间。
2. 更新与被设置变量相关的其它变量的值,比如在一个潜水艇模拟系统中,改变了其水下深度时,要相应的更新所受压强。
3. 在debug时,可以在其中,尤其是在setter中加入追踪log。
4. 在多线程环境中,如果要保护对象的并发访问,则必须在getter/setter中加入同步锁。
所以,可以看出使用getter/setter访问私有变量是很有道理的。但笔者认为,我们不应该被这个思想完全禁锢了。
什么时候可以公开变量
例如我们要提供一个保存个人信息的类,要保存姓,名,出生日期,民族,国籍,身份证号等等二三十个信息,并且这个类只供自己的代码访问,不会开放出去。
那么,与其写二三十个getter/setter,不如直接把这些变量定义为公开的更方便。
对比变量私有化的几个好处:1.我们可以在用户输入个人信息来做合法性检查,2.个人信息之间也不会产生依赖关系,3.log和锁可以加在外部访问处。
这样的写法让代码变的简洁,变量仅供自己访问又不会造成后续的麻烦。