- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:インターフェースでオブジェクトを取得する意味)
インターフェースでオブジェクトを取得する意味
このQ&Aのポイント
- インターフェースの利点として、プログラムの依存関係を解消することが挙げられます。具体的には、実装クラスに依存するのではなく、インターフェースに依存することで、プログラムの拡張性や柔軟性を高めることができます。
- 例えば、戻り値の型が実装クラスの型である場合、実装クラスが変更された際に、呼び出し元のプログラムにも修正が必要となります。一方で、戻り値の型がインターフェースである場合、インターフェース名の変更などの影響が限定的であるため、修正の範囲を最小限に抑えることができます。
- さらに、インターフェースを利用してオブジェクトを取得することで、コードの耦合度を下げることができます。具体的には、戻り値の型がインターフェースである場合、呼び出し元のプログラムは実装クラスの詳細な情報を意識する必要がなくなります。これにより、オブジェクトの実装が変更された場合でも、呼び出し元のプログラムには影響を与えずに済みます。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
> 呼び出し元を変更せずにこれらのexecuteService()を > 呼び出すように変更したいとなったときにはどうすればよいのか /spring/conf/applicationContext.xmlを修正する。 Spring以外なら、Factoryメソッドを修正する。
その他の回答 (2)
- Picosoft
- ベストアンサー率70% (274/391)
回答No.2
メソッドが増えたり減ったり、名前が変わったりという話ではありません。 この例では実装クラスが1つしかないため、インターフェースを用いる利点がわかりにくいですが、 SearchGoodsServiceの実装クラスが増えた場合のことを考えてみてください。 呼び出し元ではSearchGoodsServiceと書いておけば、 機能拡張で新しくSearchGoodsServiceImpl2やSearchGoodsServiceImpl3も扱う必要がでてきても、 呼び出し元を修正する必要はありません。
- teketon
- ベストアンサー率65% (141/215)
回答No.1
> ここで1つ疑問なのですが 戻り値の型が実装クラスの型であっても > SearchGoodsServiceImplがどう変更(メソッドが増えたり、減ったり)しても影響がないと思います。 変更する必要性があって修正しているのですから、影響は出ますよね。 > また、戻り値の型がインターフェースであたとしてもSearchGoodsServiceという > インターフェース名の変更があった場合、呼び出し元の > 全てのプログラムを修正しなくてはならないと思いますがいかがでしょうか。 もちろんです。そういうことをしなくていいように設計しなければなりません。
補足
ご回答ありがとうございます。 すみません。実際に SearchGoodsServiceImpl2やSearchGoodsServiceImpl3 を作ってみたのですが 呼び出し元を変更せずにこれらのexecuteService()を 呼び出すように変更したいとなったときにはどうすればよいのか がイメージできないです。教えていただけますでしょうか。