假设您使用FileReader
方法创建了read
类。
我知道类级别的属性可以证明拥有一个实例是合理的。但是,通过在对应的ReaderUtils
static
方法的作用域内拉入这些相同的属性来停止制作等效的read
类的原因是什么?
简而言之,对于静态实用程序方法,什么才是正确的“Doer”类的依据?
最佳答案
OOP的本质是封装状态/数据以及相关的行为。静态实用程序方法类似于过程语言中的全局函数-您正在将行为(静态方法)与状态(该方法的参数)分开,从而破坏了封装。
实际上这是什么意思?不必调用reader.read()
,而必须调用ReaderUtils.read(file)
,这意味着您现在已经紧密地与实现紧密结合了-您隐式地假设您将始终使用ReaderUtils
并始终传递文件。
如果改用通用的Reader
接口(interface),则可以立即使用FileReader
,但明天将其换成DatabaseReader
或HttpReader
,而不必更改任何其他代码-所有reader.read()
调用将继续起作用。