read
メソッドを持つFileReader
クラスがあるとします。"Do-er"クラスと静的ユーティリティメソッドの比較
私は、クラスレベルの属性がインスタンスを持つことを正当化できることを理解しています。しかし、対応するstatic
read
メソッドの範囲内でこれらの同じ属性を引き出すことによって同等のクラスを作成することを止めているのは何ですか?
つまり、静的ユーティリティメソッドに関して「Doer」クラスを正確に正当化するものは何ですか?
read
メソッドを持つFileReader
クラスがあるとします。"Do-er"クラスと静的ユーティリティメソッドの比較
私は、クラスレベルの属性がインスタンスを持つことを正当化できることを理解しています。しかし、対応するstatic
read
メソッドの範囲内でこれらの同じ属性を引き出すことによって同等のクラスを作成することを止めているのは何ですか?
つまり、静的ユーティリティメソッドに関して「Doer」クラスを正確に正当化するものは何ですか?
OOPの本質は、関連する動作と共に状態/データをカプセル化しています。静的ユーティリティメソッドは、手続き型言語のグローバル関数に似ています。つまり、動作(静的メソッド)を状態(このメソッドへのパラメータ)から分離し、カプセル化を破棄しています。
実際にはどういう意味ですか? reader.read()
に電話する代わりに、ReaderUtils.read(file)
に電話する必要があります。これは、実装に密接に結びついていることを意味します。常にReaderUtils
を使用し、常にファイルを渡すという暗黙の前提があります。
あなたの代わりに、一般的なReader
インタフェースを使用する場合は、今日FileReader
を使用しますが、他のコードを変更することなくDatabaseReader
またはHttpReader
明日のためにそれを交換することができます - すべてのreader.read()
呼び出しは同じように機能し続けます。
これは優先事項です。一般に、Javaは名詞を好んでいます(人々はこれがより多くの人に感じられるからです)。したがって、FileReader。
Jeffreyが指摘したように、時には名詞の執着は、ポイント・コールが静的メソッドでラップされる不必要な冗長性につながることがあります。
関連性は100%ではありませんが、これは人々がJavaで工場を愛していることを私に思い出させます... http://ws.apache.org/xmlrpc/apidocs/org/apache/xmlrpc/server/RequestProcessorFactoryFactory – Mehrdad
相当の 'ReaderUtils'を作成することを誰も止めているわけではありませんが、実際にはJREに実装されています。[' Files.readAllLines'](http://docs.oracle.com/javase/7/docs/api /java/nio/file/Files.html#readAllLines%28java.nio.file.Path,%20java.nio.charset.Charset%29)。 – Jeffrey