自封装有什么好处?

时间:2016-04-16 09:19:12

标签: oop refactoring encapsulation

在阅读一些重构实践时,我偶然发现this article

作者的论点是使用getter和setter修改下面的代码,我认为它们应该是private但是这样做有什么好处呢?我们不介绍函数调用开销吗?

在:

private int _low, _high;
boolean includes (int arg) {
  return arg >= _low && arg <= _high;
}

后:

private int _low, _high;
boolean includes (int arg) {
  return arg >= getLow() && arg <= getHigh();
}
int getLow() {return _low;}
int getHigh() {return _high;} 

1 个答案:

答案 0 :(得分:2)

我们说,出于某种原因,您需要将类属性的名称从_low_high更改为_min_max。在第一个版本中,您还需要修改includes()功能。在第二个版本中,您只需要修改getter。在你的例子中,好处很小,但是在更大的类中它可以为你节省大量的工作。

一个稍微复杂的例子,其中不再存储较高的值,而是从较低的值和间隔得出:

private int _low, _interval;
boolean includes (int arg) {
    return arg >= getLow() && arg <= getHigh();
}
int getLow() {return _low;}
int getHigh() {return _low + _interval;}

再次,您只需要修改getter。

关于开销:根据您使用的语言,编译器将优化函数调用。