你是对的,这是因为我们不能相信自己.可变状态是计算机程序复杂性的一个主要因素,它很容易构建起初看起来不错的东西,随后随着系统变大而变得失控.限制访问有助于减少对象状态以不可预测的方式发生变化的机会.这个想法是让对象通过明确定义的渠道相互通信,而不是直接调整彼此的数据.通过这种方式,我们有一些希望测试单个对象,并对它们如何作为更大系统的一部分表现出一些信心.
让我举一个基本的例子(这只是为了说明):
class Foo {
void processBar() {
Bar bar = new Bar();
bar.value = 10;
bar.process();
}
}
class Bar {
public int value;
public void process() {
// Say some code
int compute = 10/value;
// Her you have to write some code to handle
// exception
}
}
Run Code Online (Sandbox Code Playgroud)
每件事看起来都很好,你很开心.现在稍后您意识到其他开发人员或您用于设置值的其他apis正在设置0,这会导致您的Bar.process()函数出现异常.
现在根据上面的实现,你无法限制用户将其设置为0.现在看下面的实现.
class Foo {
void processBar() {
Bar bar = new Bar();
bar.setValue(0);
bar.process();
}
}
class Bar {
public int value;
public void setValue(int value) {
if(value == 0)
throw new IllegalArgumentException("value = 0 is not allowed");
this.value = value;
}
public void process() {
// Say some code
int compute = 10/value;
// No need to write exception handling code
// so in theory can give u better performance too
}
}
Run Code Online (Sandbox Code Playgroud)
您不仅可以进行检查,还可以提供信息性异常,这有助于在早期阶段快速发现错误.
这只是其中一个例子,OOP(封装,抽象等)的基础知识,帮助您标准化界面并隐藏底层实现.
| 归档时间: |
|
| 查看次数: |
1768 次 |
| 最近记录: |