我正在研究StringTokenizer.java
班,并且出现了几个想到的问题。关于公共方法的私人方法
我注意到其他类使用的公共方法调用了一些完成所有工作的私有方法。现在,我知道OOD的原则之一就是尽可能多地隐私并隐藏所有的实现细节。我不确定我完全理解这背后的逻辑。
我知道将字段设置为私有是非常重要的,以防止将无效值存储在其中(只是其中一个原因)。但是,谈到私人方法时,我不确定他们为什么如此重要。
例如,在StringTokenizer
类的情况下,我们不能只是将所有的实现代码放在公共方法中吗?由于这些方法的API(即调用这些公共方法的规则)将保持不变,它将如何改变使用这些方法的类?我能想出为什么私有方法有用的唯一原因是因为它可以帮助您避免重复编写代码。例如,如果所有的公共方法都做了同样的事情,那么你可以声明一个私有方法来完成这个任务,并且可以被公共方法使用。
其他问题,与公共方法相比,用私有方法编写实现有什么好处?
这里是一个小例子:
public class Sum{
private int sum(int a, int b){
return a+b;
}
public int getSum(int a, int b){
return sum(a,b);
}
}
Vs的...
public class Sum{
public int getSum(int a, int b){
return a+b;
}
}
是怎样的第一个样本更有益?
我不明白你的意思。如果我错过了一些东西,请原谅我。我说:“所以拥有一个私有方法总是很好,因为你知道改变它没有问题,即使你可以安全地向该方法添加更多参数”。但是,面向客户端的公共API仍然是一样的。所以你写了一个公共方法中的所有逻辑,或者在其中调用一个函数,或者做任何查看公共API的客户端都没有观察到任何差异的东西。实现中的代码仍然可以在任何时间点更改,这与改变私有函数的合同/实现一样好 – Saurabh
@saury在这种特殊情况下,是的,它是相同的API,但您仍然不能保证它未来会保持不变。根据我自己的经验,我可以从“哦,让我们直接公开这个想法”这个想法为您提供建议,如果将来我们需要它私人化,我们会改变它“最终发生的事情是这样的方法从来没有成为私有的,所以它最好是在开始时有一点过度体系结构,而不是稍后再做一个巨大的重构。 –
如果一个公共方法调用了“没有问题”更改的私有方法,那么公共方法是否会中断呢?如果是这样,在“安全地改变”任何事物方面没有任何区别。无论你改变什么都必须进行测试 - 使其公开/私人不会给你任何额外的安全性。 – gented