Factoryの具象クラスをインスタンスするのは誰?
Simple Factory
というのが、デザインパターンとしてあるのですね。今日Twitter上のTLに流れてきて、気になってググってみたら、Strategic Choiceさんのブログに行き着きました。
Factory Methodとの違いは、Factoryを具象クラス一本に絞ったという感じでしょうか。
Factoryの具象クラスをインスタンスするのは誰?
さて本題。Factory Methodは、FactoryとProductの両方について、抽象層にインターフェースを設け、具象層に各インターフェースの具象クラスを置きます。ClientオブジェクトはFactoryのインターフェースを通して具象Productを生成し、インターフェースとして取得する形となります。
前から気になっていたのですが、誰かが具象Factoryを生成してあげる必要があります。ClientがFactoryをインスタンス化するのであれば、ClientはProductの実装への依存はなくせますが、依然factoryの実装には依存してしまいます。
じゃぁ、FactoryのためのFactoryが必要?
そのFactoryのためのFactory生成は誰が行うの?
と堂々巡りしてしまい、私の中では「いらない子」扱いのパターンでした。
DIコンテナさん登場
Factoryの具象クラスへの依存をどう解決すべきか分からず、もやっとしていたのですが、素直にDIコンテナさんに任せちゃえばいいんじゃないかなと、ここ最近気づきました。
しかし、DIコンテナの機能として、たいてい遅延実行をサポートしているので、遅延実行のための高階関数をFactory代わりにしてしまえる気がします。(使う側のClientはどんな形であれ依存が解決できればいいはずなので)
結局、Factory Methodいらなくね?と、現在進行形で「いらない子」になってるのでした。