Używam jedności i tworzę klasę, która ją owija, a ja nie wiem jak to nazwać, lokalizator usług lub fabryka, oba hermetyzują tworzenie obiektów, więc ... jaka jest różnica?Jaka jest różnica między lokalizatorem usług a wzorcem projektu fabrycznego?
Odpowiedz
Fabryka tworzy obiekty dla ciebie, gdy wymagane.
Lokalizator usług zwraca obiekty, które mogą już istnieć, czyli usługi, które już gdzieś istnieją.
Wystarczy pomyśleć o znaczeniu imion:
- fabryka jest miejscem, gdzie obiekty są tworzone.
- Usługa: jest czymś, co może zrobić coś dla ciebie jako usługi.
- Lokalizator usług: jest czymś, co może znaleźć coś, co może wykonać usługę.
Przeczytaj to Mark Seemann
http://blog.ploeh.dk/2010/11/01/PatternRecognitionAbstractFactoryOrServiceLocator.aspx http://blog.ploeh.dk/2010/02/03/ServiceLocatorIsAnAntiPattern.aspx
To jest dobre dla początku
W rzeczywistości istnieje wyraźny podział między tymi dwoma wzorcami. Powszechnie wiadomo, że oba wzorce są używane w celu uniknięcia zależności od konkretnych typów.
Jednak po czytać
- Agile Software Development, Zasady, wzory, i praktyka [książka] Rober C. Martin
- odwrócenie sterowania Kontenery i wzorzec Dependency Injection [artykuł] przez Martin Fowler w http://martinfowler.com/articles/injection.html
- Rozpoznawanie wzorów: abstrakcyjna fabryka lub lokalizator usług? [Artykuł] Mark Seemann w http://blog.ploeh.dk/2010/11/01/PatternRecognitionAbstractFactoryorServiceLocator/
- wzorzec projektowy [Książka] przez Erich Gamma et al
niektórych poważnych sprzeczności powstaje:
Seemann powiedział: „An Abstract Factory to typ rodzajowy, a typ zwrotu metody Create jest określony przez typ samej fabryki, innymi słowy, skonstruowany typ może zwracać tylko instancje jednego typu. "
Podczas gdy Rober C. Martin nie wspomniał nic o typowych typach, a ponadto, przykład fabryki w swojej książce pozwala utworzyć instancję więcej niż jednego rodzaju obiektów, rozróżniając je za pomocą ciągu kluczy jako parametru w Factory.Make().
Gamma powiedział, że intencją Abstract Factory jest "Zapewnienie interfejsu do tworzenia rodzin powiązanych lub zależnych obiektów bez określania ich konkretnych klas". Warto wspomnieć, że przykład Gamma Abstract Factory narusza Zasady Segregacji Interfejsu (ISP) podane przez Martina. ISP i SOLID w ogóle są bardziej nowoczesnymi zasadami, a może z prostotą, gdzie są pomijane.
Prace Gammy i Martina poprzedzają Seemann, więc myślę, że powinien on podążać za definicją już dokonaną.
Podczas gdy Fowler proponuje Service Locator jako sposób na wdrożenie Inendency Inversion, Seemann uważa to za anty-wzór. Ani Gamma, ani Martin nie wspominają o Lokalizatorze Usług.
Jednak Seemann i Fowler zgodzili się, że Service Locator potrzebuje kroku konfiguracyjnego, aby zarejestrować instancję klasy konkrety, która to instancja zostanie później zwrócona, gdy zażąda się tego rodzaju obiektu. Ten etap konfiguracji nie jest wspomniany przez Martina ani Gammę w ich definicji Abstract Factory. Streszczenie Fabryczny wzór zakłada utworzenie nowego obiektu za każdym razem, gdy żąda się tego rodzaju obiektu.
Wnioski
Główną różnicą pomiędzy lokalizatora usług i Abstract Factory jest Abstract Factory przypuszczać nowy obiekt jest instancja powrócił na każdy wniosek i obsługa Locator musi być skonfigurowany z instancją obiektu i za każdym razem, gdy samo wystąpienie zostanie zwrócone.
Usługa na końcu to klasa, która coś robi. Aby go pobrać, musi zostać utworzony, aby ... Lokalizator Usług był jak fabryka, ponieważ musi utworzyć "nowy" – toroveneno
Nie musi tworzyć nowego obiektu usługi ... zamiast tego obiekt usługi będzie zarejestrowany przed próbą zlokalizowania usługi, może być, gdy aplikacja się uruchomi, aby w przyszłości lokalizator usługi mógł zwrócić tę usługę do dzwoniącego. –
Podobnie jak "prostota" odpowiedzi – Spock