ファクトリパターンを使用するもう1つの重要な理由は、デザインとコードにクラスを追加する必要があるときにコードがどうなるかを考慮することです。
ファクトリパターンを使用していない場合、コードはますます緊密に結合されるため、さまざまな場所で変更を加える必要があります。コードに触れる必要のあるすべての場所が、触れる必要のある他のすべての(密結合の)場所と調整されていることを確認する必要があります。 テストははるかに複雑になり、何かが壊れてしまいます。
ファクトリパターンは、結合を減らす方法を提供し、責任をほんの数か所にカプセル化するのに役立ちます。ファクトリパターンでは、クラスを追加することは、より少ない場所でコードに触れることを意味します。テスト(テストケースの作成とテストの実行)が簡素化されます。
現実の世界では、ほとんどのコードは「十分に」複雑であるため、ファクトリパターンの利点は明らかです。オブジェクトモデルを変更、改良、拡張し、急速な変化に直面してテストを可能な限り完全かつ厳密にし、コードを可能な限り非厳密にすることを保証します(すべて、複数の人が数ヶ月/数年の間にそれに取り組んでいます)-ファクトリパターンは通常、簡単です。
簡単な例では、ファクトリパターンを使用する利点を理解するのは難しい場合があります。(そして、あなたのコードが本当に些細なものであるなら、そのパターンはおそらくあなたをあまり買わないでしょう。)それは私がウェブでそれを検索するときに私が見る多くの例の問題です-例は焦点を合わせる傾向があります'あなたは決定することができます実行時のクラス!」と単純化されています。
これはそれほど些細なことではない1つの例であり、パターンの考えられるすべての利点について人々に考えさせると思います
。BobTarrによるファクトリパターンに関するプレゼンテーション(pdf)。(例2、10ページから始まります。)人が迷路と迷路内のすべての部屋を探索する必要がある迷路ゲームを書いていると想像してください。オブジェクトモデルには、ドア、部屋、壁などで構成される迷路が含まれ、それらすべてを追跡する必要があるマップもあります。十分に単純です。しかし、エンチャントされた部屋とエンチャントされたドアと魔法の窓を追加し始めるとどうなりますか話す写真とツイスティリトルパッセージ?すべてを表すために多くのクラスが作成されることになります。新しいクラスを追加するときに、できるだけ少ないコードを変更(タッチ)する必要があることを確認する必要があります。また、たとえば、新しいクラスを追加するたびにMapクラスのコードを変更する必要はありません。つまり、クラスが実際に責任を負うべきことに焦点を合わせたままにしておきたいのです。
実行時にインスタンス化されるものだけでなく、コードの複雑さについても考えてください。
彼はまた、UIコンポーネントでファクトリパターン(具体的にはファクトリメソッド)を使用する例を示しています。ここでは、ファクトリパターンが頻繁に表示されます。(初心者、またはUIコードを扱ったことがない人にとって、その例はそれほど明確ではないと思います。)
ほとんどのコーディングは既存のコードで行われることを忘れないでください。ほとんどの時間は、すでに存在するコードの変更に費やされます。コードが壊れることなく変更を処理できることを確認する必要があります。結合を減らし、責任をカプセル化することは、そうするのに大いに役立ちます。