4

私はJavaコードを調べていて、オブジェクトが何らかのインターフェースを使用して割り当てられていることを確認しました.このインターフェースには、new演算子を使用してオブジェクトを割り当てるためのメソッドがいくつか含まれています. new演算子を使用してオブジェクトを直接割り当てるのではなく、なぜインターフェイスを使用したのか、私には考えられません。例えば:

Animal animal = new Animal();

また

Animal animal = interface.allocateAnimal()

これは、何もしない interfaceメソッドを持つインターフェースです。allocateAnimalnew Animal()

つまり、最終的には同じことを行っていますが、方法が異なるため、ここで何が得られるのでしょうか?

編集 1: 実際には、インターフェイスは別の場所に実装されています。したがって、インターフェイスには実装コードは含まれず、メソッドのみが含まれます。

4

3 に答える 3

6

まず、interfaces は何も割り当てていません。彼らは契約を結んでいるだけです。

そこにあるのはfactory method patternです。誰かがそのインターフェースを実装することを決定し、具体的な実装のメソッドがAnimalオブジェクトを作成しています。パターンへのリンクを確認すると、ファクトリ メソッドに関する詳細な説明が表示されます。

チェックアウトする価値があるファクトリパターンを使用する理由について、ここに質問があります。ポイントは次のとおりです。

...ファクトリを使用すると、消費者は、作成方法や依存関係の詳細を知らなくても、新しいオブジェクトを作成できます。実際に必要な情報を提供するだけで済みます。

interfaceさらに何かがあります: あなたが読んでいるコードを書いた人は、Java の技術的なキーワードではない何かのプログラミング インターフェースを参照しようとするかもしれません。それは別の意味です

于 2013-05-15T09:06:31.847 に答える
4

ファクトリーメソッドと呼ばれるデザインパターンです。

注: クラスには API (アプリケーション プログラミング インターフェース) がありますが、「インターフェース」自体には特別な意味があります。Java ではキーワードです。あなたの例にはメソッドの実装があるため、インターフェイスにすることはできません。

編集

それが実際に Java インターフェースである場合、Abstract Factory デザイン パターンの実装が表示される可能性があります: http://en.wikipedia.org/wiki/Abstract_factory_pattern

于 2013-05-15T09:08:49.003 に答える
2

インターフェイスには実装を含めることができないため、実際にはインターフェイスにコードはないと思います。

ただし、interface.allocateAnimal() を使用する理由は、どの動物から新しいものを取得したいかわからない場合があるためです。馬、犬、猫などです。

実行時にのみわかります。したがって、インターフェイス オブジェクトは実行時に Cat などの実装になり、Cat オブジェクトにnew Cat()は返される があります。

于 2013-05-15T09:07:11.307 に答える