假设您使用FileReader方法创建了read类。

我知道类级别的属性可以证明拥有一个实例是合理的。但是,通过在对应的ReaderUtils static方法的作用域内拉入这些相同的属性来停止制作等效的read类的原因是什么?

简而言之,对于静态实用程序方法,什么才是正确的“Doer”类的依据?

最佳答案

OOP的本质是封装状态/数据以及相关的行为。静态实用程序方法类似于过程语言中的全局函数-您正在将行为(静态方法)与状态(该方法的参数)分开,从而破坏了封装。

实际上这是什么意思?不必调用reader.read(),而必须调用ReaderUtils.read(file),这意味着您现在已经紧密地与实现紧密结合了-您隐式地假设您将始终使用ReaderUtils并始终传递文件。

如果改用通用的Reader接口(interface),则可以立即使用FileReader,但明天将其换成DatabaseReaderHttpReader,而不必更改任何其他代码-所有reader.read()调用将继续起作用。

10-04 11:08