我使用的是團結,我創建了一個包裝它的類,我不知道如何調用它,服務定位器或工廠,都封裝了對象的創建,所以....有什麼區別?服務定位器和工廠設計模式有什麼區別?
12
A
回答
20
一家工廠爲您創建對象,請求時。
服務定位器返回可能已存在的對象,即可能已存在於某處的服務。
想想的名字的含義是:
- 廠:是在其中創建對象的地方。
- 服務:是一種可以爲您做點事情的服務。
- 服務定位器:可以找到可以執行服務的東西。
4
6
實際上這兩種模式之間都有明顯的分離。衆所周知,這兩種模式都用於避免具體類型的依賴性。
但是之後讀
- 敏捷軟件開發,原則,模式和做法[圖書]由羅伯特C.馬丁
- 控制反轉容器和依賴注入模式[文章]由Martin Fowler http://martinfowler.com/articles/injection.html
- 模式識別:抽象工廠或服務定位器? [文章]由馬克·西曼在http://blog.ploeh.dk/2010/11/01/PatternRecognitionAbstractFactoryorServiceLocator/
- 設計模式[圖書]由Erich Gamma等
一些嚴重的矛盾出現了:
西曼說:「一個抽象工廠是一個泛型類型, Create方法的返回類型由工廠本身的類型決定,換句話說,構造類型只能返回單一類型的實例。
儘管Rober C. Martin沒有提到有關泛型的任何內容,而且他的書中的工廠實例允許創建多個類型的對象的實例,使用一個鍵串作爲Factory.Make中的參數來區分它們()。
Gamma表示Abstract Factory的意圖是「提供一個創建相關或依賴對象族的界面,而不指定它們的具體類」。值得一提的是,Gamma抽象工廠的例子違反了Martin所說的接口隔離原則(ISP)。一般而言,ISP和SOLID是更現代化的原則,或者爲了簡單起見,可以省略。 Gamma和Martin的作品先於Seemann的作品,所以我認爲他應該遵循已定義的定義。
雖然福勒提出服務定位器作爲實現依賴倒置的一種方式,但Seemann認爲它是一種反模式。 Gamma或Martin都沒有提到服務定位器。
但是,Seemann和Fowler同意服務定位器需要一個配置步驟來註冊一個concretes類的實例,該實例將在稍後請求該類對象時返回。 Martin或Gamma在他們對抽象工廠的定義中未提及此配置步驟。抽象工廠模式假設每次請求該類對象時都會實例化一個新對象。
結論
服務定位器和抽象工廠之間的主要區別是抽象工廠假設一個新的對象被實例化在每個請求的返回和服務定位器需要與對象實例和每次被配置同樣的實例將被返回。
相關問題
- 1. 策略和工廠設計模式有什麼區別?
- 2. 工廠和管道設計模式有什麼區別?
- 3. 工廠方法和抽象工廠設計模式有什麼區別?
- 4. 策略設計模式與抽象工廠模式有什麼區別?
- 5. Dispatcher視圖和服務與工作設計模式有什麼區別?
- 6. 設計模式和架構模式有什麼區別?
- 7. DI與工廠模式有什麼區別?
- 8. 模擬,存根和工廠女孩有什麼區別?
- 9. 界面和設計模式有什麼區別?
- 10. Facade和Gateway設計模式有什麼區別?
- 11. Spring singleton和Java singeleton(設計模式)有什麼區別?
- 12. 設計和建築模式有什麼區別
- 13. SVN服務器和HTTP服務器有什麼區別
- 14. netflix zuul服務器和netflix eureka服務器有什麼區別?
- 15. Web服務器和遊戲服務器有什麼區別?
- 16. 網絡服務器和應用服務器有什麼區別
- 17. 使用服務定位器反模式和使用Castle Windsor容器有什麼區別?「
- 18. 定義服務和工廠分別
- 19. 工廠模式設計
- 20. 工廠設計模式VS構造器
- 21. PHP設計模式工廠,倉庫和...?
- 22. Petapoco具有用於多個服務器連接的工廠設計模式
- 23. DAO和DP模式有什麼區別?
- 24. 「::」和「sys」模式有什麼區別?
- 25. Oracle和Microsoft模式有什麼區別?
- 26. Factory和Strategy模式有什麼區別?
- 27. GOF和GRASP設計模式之間的區別是什麼
- 28. 分佈式和分散式服務之間有什麼區別?
- 29. 應用服務,域名服務和基礎設施服務有什麼區別?
最後的服務是一個類,它做了一些事情。要檢索它,必須創建如此....服務定位器就像一個工廠,因爲它必須創建一個「新」 – toroveneno
它不必創建一個新的服務對象...而是服務對象將是在嘗試定位服務之前註冊,可能是應用程序啓動時,以便將來服務定位器可以將該服務返回給調用者。 –
就像答案的「簡單」一樣 – Spock