私は統一性を使用していますが、私はそれをラップするクラスを作成しています。サービスロケータまたはファクトリを呼び出す方法はわかりません。両方ともオブジェクトの作成をカプセル化します。サービスロケータとファクトリデザインパターンの違いは何ですか?
答えて
工場は、あなたのためのオブジェクトを作成し、初めのために良いことです。
サービスロケータは、既に存在する可能性のあるオブジェクト、つまりあなたのためにすでに存在する可能性のあるサービスを返します。
は名前だけの意味を考える:
- ファクトリー:オブジェクトが作成される場所です。
- サービス:サービスとして何かを行うことができるものです。
- サービスロケータ:サービスを実行できるものを見つけることができるものです。
実際には、両方のパターンが明確に分離されています。どちらのパターンも具体的な型からの依存を避けるために使用されることはよく知られています。ローベルC. Martinによる
しかし後
- アジャイルソフトウェア開発、原則、パターン、およびプラクティスを読む[書籍]
- コントロールコンテナと依存性注入パターンの反転[記事] Martin Fowler氏によるでhttp://martinfowler.com/articles/injection.html
- パターン認識:要約工場またはサービスロケータ? Erich Gamma氏ら
いくつかの深刻な矛盾によってhttp://blog.ploeh.dk/2010/11/01/PatternRecognitionAbstractFactoryorServiceLocator/
シーマンは言った:「抽象工場がジェネリック型であり、 Createメソッドの戻り型は、ファクトリ自体の型によって決まります。つまり、構築された型は単一の型のインスタンスのみを返すことができます。
Rober C. Martinはgeneric型について何も言及しておらず、さらに彼の本のfactoryの例では、Factory.Makeのパラメータとしてキー文字列を使用して複数のオブジェクトのインスタンスを区別できます()。
ガンマは、抽象ファクトリの目的は、「具体的なクラスを指定せずに、関連オブジェクトまたは依存オブジェクトのファミリを作成するためのインタフェースを提供すること」であると述べました。 Gamma Abstract Factoryの例は、Martinによって記述されたInterface Segregation Principle(ISP)に違反していることに言及する価値はあります。 ISPとSOLIDは、一般的には近代的な原則であるか、簡略化のため省略されています。
ガンマとマーティンの作品はセーマンズに先行しているので、彼は既に定義されたものに従うべきだと思います。
FowlerはDependency Inversionを実装する方法としてService Locatorを提案していますが、Seemannはそれを反パターンとみなしています。 GammaやMartinはService Locatorについて言及していません。
しかし、SeemannとFowlerは、Service LocatorがConcretesクラスのインスタンスを登録するための設定ステップが必要であることに同意しました。そのインスタンスは、そのようなオブジェクトが要求されたときに後で返されるものです。この構成ステップは、Abstract Factoryの定義においてMartinまたはGammaによって言及されていません。抽象ファクトリパターンは、そのような種類のオブジェクトが要求されるたびにインスタンス化される新しいオブジェクトを想定します。サービスロケータと抽象工場の主な違いは、抽象工場は新しいオブジェクトが各要求で返され、サービスロケータがオブジェクトインスタンスたびに設定する必要がインスタンス化されると仮定していることである
結論
同じインスタンスが返されます。
- 1. サービスロケータのアンチパターンの使用とキャッスルウィンザーのコンテナの使用の違いは何ですか?
- 2. $と$$の違いは何ですか?
- 3. `##`と `hashCode`の違いは何ですか?
- 4. typedefとの違いは何ですか?
- 5. NodeJS:「./ ..」と「..」の違いは何ですか?
- 6. {}())と{})の違いは何ですか?
- 7. `&`と `ref`の違いは何ですか?
- 8. `==`と `is`の違いは何ですか?
- 9. difftimeと ' - 'の違いは何ですか?
- 10. #{} $ {}と%{}の違いは何ですか?
- 11. ⊕と+の違いは何ですか?
- 12. アペンダーと〜の違いは何ですか?
- 13. "./"と "../"の違いは何ですか?
- 14. "$^N"と "$ +"の違いは何ですか?
- 15. %Qと%{}の違いは何ですか?
- 16. バックスティックと$()の違いは何ですか?
- 17. A`と ``の違いは何ですか[:] `
- 18. パッケージのインポートobjと何かの違いをインポートパッケージとPythonの何かの違いは何ですか?
- 19. METADATAとMETADATA.jl:違いは何ですか?
- 20. twistdとnohup&:違いは何ですか?
- 21. libspeとlibspe2?違いは何ですか?
- 22. Backbone.jsとPusherapp - 違いは何ですか?
- 23. wp_link_pagesとthe_posts_pagination→違いは何ですか?
- 24. $ dirtyと$ invalid:違いは何ですか?
- 25. XPathの//と?/の違いは何ですか?の使用は何
- 26. フレームとオブジェクトの違いは何ですか?フレームとオブジェクトの違いは何ですか?
- 27. リストと何か([_])と何か(_)の違い
- 28. 違いは何ですか?
- 29. 違いは何ですか?
- 30. Javaではargsとargghとargvの違いは何ですか?
最後のサービスは何かをするクラスです。それを取得するには、それを作成する必要があります。サービスロケータは、「新しい」サービスを作る必要があるため、工場のようです – toroveneno
新しいサービスオブジェクトを作成する必要はありません...代わりにサービスオブジェクトが作成されますアプリケーションを起動しようとする前に登録されている場合、アプリケーションが起動すると、サービスロケータがそのサービスを呼び出し元に返すことができるようになります。 –
回答の「簡潔さ」と同様 – Spock