• 締切済み

メソッドの戻り値をインターフェースとする利点ってなんでしょうか?

メソッドの戻り値をインターフェースとする利点ってなんでしょうか? サードパーティ製のライブラリなどでよく見かけますが 具体的にどういう利点があるのでしょうか?

みんなの回答

  • OKbokuzyo
  • ベストアンサー率43% (130/296)
回答No.2

サードパーティ製とおっしゃられているものがなんなのかわからないので はっきりとしたことは言えませんが メソッドの戻り値の型をインターフェースとする理由は 下記のようなパターンが考えられます。 1.Abstract Factoryパターンを想定されたFactoryクラスである。 2.利用者にnewしてほしくないクラスである。 1.はAbstract Factoryで調べればいくらでもひっかかるのでご自身で調べてください。 一般的にAbstract Factoryは抽象クラスで解説されていますが 考え方さえわかればインターフェースを戻り値にしても 同等のことができることがわかるはずです。 2.はインターフェースを実装したprivateなインナークラスの オブジェクトを返すことによって 利用者にnewされることなく、オブジェクトのみ渡すという手法です。 こうするとキャストされることもありません。 ただし、普通はSingletonパターンを用いたり staticで済ましたりすることが多いので 普通はあまり使われることはないと思います。 そもそもnewさせたくない理由としては 1.オブジェクトが重いので乱立させたくない。 2.コンストラクタの処理に時間がかかる。 3.その他、排他等のため などの理由があり、あらかじめシステムでプールしておいて 利用者には貸し出すという形をとりたい場合が考えられます。 2のパターンは比較的大きなシステムじゃない限り 滅多利用することはないと思いますが その場合はライブラリというより どちらかというとフレームワークであることの方が多いと思います。 (まぁ、いずれにしても実態はjarですけど)

  • askaaska
  • ベストアンサー率35% (1455/4149)
回答No.1

インターフェースが同じならどこにでも使いまわせるでしょ? 身近なもので例を挙げるわね。 パソコンのUSB機器。 実に多種さまざまあるわね。 でもパソコンとのインターフェースをUSBインターフェースに共通化することで USBを差し込めるパソコンなら誰でもそのUSB機器を利用することができるわ。 インターフェースの共通化というのはすごくメリットの大きいことなのよ。 また、もうひとつの理由もあるわ。 実装クラスには多種さまざまなメソッドが用意されている でも、中には利用されたくないメソッドもあったりする。 そんなときは、限定されたメソッドだけをインターフェースとして公開するのよ。 もちろん直接キャストとかしちゃえば使えちゃうけど、 それは作り手の期待していない使い方だわ。 作り手が使ってほしい機能だけを公開する。 そのためのインターフェースよ。

kyonn2008
質問者

お礼

私の質問の仕方がいけないのか 回答として的を得ていないようにお見受けします。 わざわざご回答ありがとうございました。

関連するQ&A

専門家に質問してみよう