2010-09-27 7 views
6

Proszę, pomóż mi zrozumieć wzór Fabryki i wzór Singleton, kiedy musimy użyć wzoru Fabryki i kiedy użyć wzoru Singleton.W którym scenariuszu używamy wzoru fabrycznego, w którym występuje wzór singletonowy?

Jaka jest główna zaleta/wada jednego z nich w stosunku do drugiej?

Każda sugestia (wyjaśnienie) pomoże mi dużo.

+0

@ Zamknij Obsługiwaną osobę: Dlaczego to pytanie nie jest prawdziwe? – Vijjendra

+1

Chociaż może to być nieco poza zasięgiem i nieco skomplikowane i mistyfikujące, to nadal warto wspomnieć, że używanie struktury DI/IoC może naśladować zarówno zachowania tworzące Singleton-Patterned instancji obiektów lub Spit je jak fabryki. W ten sposób możesz zachować wysoką testowalność, ponieważ nie jesteś połączony ze statycznymi połączeniami singleton. Tylko mój 2c – Aren

+0

@Aren, niestety nie sądzę, że twój komentarz pomoże OP, jak przewidujesz. –

Odpowiedz

2

Robią dwie bardzo różne rzeczy.

Fabryka istnieje, aby utworzyć jedną lub więcej kopii danej klasy. To lub metoda, którą eksponuje, może być dostarczone innej klasie, która potrzebuje zależności, a klasa zależna może wywołać metodę fabryczną, aby uzyskać instancję.

Istnieje tylko jeden singlet, aby utworzyć jedną i TYLKO jedną kopię klasy. Odwołanie do klasy jest uzyskiwane statycznie, ale odniesienie to może być przekazywane jako instancja, w przeciwieństwie do klasy czysto statycznej.

+0

kiedy używamy wzorca Singleton, tworzone jest tylko jedno wystąpienie klasy, to wystąpienie jest wspólne dla wszystkich użytkowników LUB każdy użytkownik ma własną instancję? – Vijjendra

+0

@Vijjendra - "wspólny dla wszystkich użytkowników" LUB "każdy użytkownik ma swoje własne wystąpienie" zależy od tego, czy kod wykonawczy jest w tym samym procesie, czy nie. Nie ma nic wspólnego z "użytkownikami". Jeśli Twój proces jest aplikacją WWW, instancja pojedyncza może być jedyną instancją dla wszystkich żądań, ale jeśli twój serwer sieciowy uruchomi inny proces roboczy/zadaniowy, w przestrzeni pamięci dla tego procesu może również występować inna instancja typu singleton. –

+0

@Mike: Dzięki, mike, wyjaśnij scenariusz drugiej części (serwer sieciowy). – Vijjendra

3

Nie są bardzo podobne, a więc nie mają przewagi nad sobą. Jeśli jesteś zdezorientowany, przeczytać pierwszy:

Użyj Singleton kiedy chcesz zezwolić tylko jedno wystąpienie klasy obiektu do instancji.

Użyj wzorca fabrycznego, aby wyodrębnić szczegóły instancji klasy obiektu.

Powiązane problemy