0

すべての Java クラスがインターフェイスを実装する必要があるかどうかについて、いくつかの回答を見てきました。意見はさまざまで、個人的には、インターフェイスの実装が 1 つしかないと確信している場合、インターフェイスを作成する利点はないと思います。

ただし、この場合、この特定のクラスはフレームワークの一部であり、他のクラスによって使用されます。ユーザーが実装を直接使用できるようにするのは適切ですか、それともインターフェイスを作成する必要がありますか? 現在、パブリック/プライベートを介してユーザーのメソッドへのアクセスを制御しています。

などのクラスStringはインターフェイスを実装せず、直接使用します。一方、そのコードはかなり古く、おそらくそれ以降変更されており、何かを壊すのを避けるために更新されていません。

4

2 に答える 2

1

インスタンスの作成方法を制御すれば、何を公開しても問題ありません。インスタンスの作成方法を制御しないと、かなり問題になります。

クライアントはインターフェースを作成できず、それらを実装する具象オブジェクトのみを作成できます。

ただし、インスタンスが常に制御する何らかのメカニズム (ファクトリ、ルックアップ、インジェクションなど) を介して作成される場合、ほとんどの場合、インターフェイス、抽象クラス、または具象クラスの区別は問題になりません。

クライアントがインスタンスを拡張することが予想される場合、それも影響があります。インターフェイスを拡張できますが、通常のクラスを拡張できる方法とは異なります。メカニズムと影響は少し異なります。

最終的に、ほとんどの場合、具体的なクラスは、独自のインスタンスを作成しない限り、誰も賢くなくてもインターフェイスに変換できます。

于 2013-03-20T00:00:19.367 に答える
0

まず第一に、一般的に、独断的にならないことは良い考えです

次のように考えてみてください。家を建てるとき、使用する釘を 1 種類に決めるべきではありません。すべての釘を使用することはできません。必要なときに、特定のニーズと材料に最も適した種類を選択できます。

したがって、インターフェイスをいつどのように使用するかは、クラスの型、構造、および使用目的に完全に依存します。クラスごとに常に 1 つのインターフェイスを使用する必要はありません。特に、SRP を重視し、クラスを小さくして単一の責任に制限する場合はそうではありません。しかし、そうしたい場合もあれば、同じクラスに複数のインターフェースを実装する正当な理由が見つかる場合もあります。

インターフェイスに関する重要な点は、実装の数に関係なく、インターフェイスを使用して特定の実装から抽象化することです。これを行う理由はたくさん考えられます。たとえば、他の誰かにインスタンス化を処理させたり (アプリケーション サーバーなど。このアプローチはフレームワークでよく使用されます)、依存関係管理を改善するためにコンポーネントを切り離したり、単体テストを忘れないようにするためです (コードがインターフェイスへの参照のみを持っている場合、オブジェクトをモックする方がはるかに簡単です) など。API が実装される回数に基づいて決定する必要はありませんが、コードを維持するための最良の方法を選択する必要があります。きれいに構造化され、疎結合で読みやすい。

何をすべきかを決めるには、あなたが建てている家についてもっと学ぶことから始めましょう: SOLID の原則を確認し、それらをうまく適用してみてください。抽象化とインターフェース、およびそれらを何に使用すべきかについて、より多くのことを知ることができます。彼らもすべてに対する答えを持っているわけではありませんが、そこから先は、彼らがカバーしていないものに対処するために、独自の観察を開始し、おそらく独自の原則を発明することができます. 彼らは間違いなく始めるのに良い場所です.

于 2013-03-20T00:23:10.553 に答える