2009-04-15 15 views
11

Jestem całkiem nowy w Design Patterns.I po prostu natknąłem się na Factory Design Pattern. Zrozumiałem, że deleguje instancję do podklas. Ale nie dostałem faktycznego zastosowania wzoru. W których scenariuszach można zastosować ten wzór, aby uzyskać dobry efekt. Słyszałem o nadużyciu wzorca i nie chciałem sobie z tym poradzić. Czy ktokolwiek może wymienić przykład z prawdziwego świata, w którym jest powszechnie stosowany.Jakie są praktyczne zastosowania wzoru metody Factory?

Odpowiedz

3

Używałem go do wtyczek do aplikacji ... w ten sposób można wywołać główną aplikację w fabryce klas, aby utworzyć konkretną wtyczkę implementującą interfejs opracowany w głównej aplikacji. W ten sposób możesz zakodować główną część aplikacji, nie musisz nawet wiedzieć, co zostanie podłączone.

2

Po prostu użyłem go w aplikacji planowania, w której zadania do zaplanowania znajdują się w osobnych złożeniach, a program planujący nie wie nic o zadaniach ... Otrzymuje nazwę zestawu, z którym definiowane jest zadanie od źródło zewnętrzne, a następnie dynamicznie ładuje złożenie, tworzy instancję klasy w tym złożeniu, używając dobrze zdefiniowanego interfejsu. Metoda fabryczna w programie planującym, która pobiera nazwę zespołu jako parametr wejściowy, zwraca wystąpienie klasy w załadowanym zespole ...

.. ale jest tak wiele zastosowań i sposobów użycia .. wzór.

-2

Wzorzec fabryczny jest bardzo przydatny do odwzorowania pojemności w odpowiednim programie obsługi.

4

Załóżmy, że masz kolejkę zawierającą obiekty typu task. Teraz można podklasę task z różnych powodów. Jeśli ładujesz zadania z jakiegoś źródła, takiego jak baza danych, możesz użyć fabryki, aby określić typ zadania do załadowania.

Na przykład:

private IEnumerable<Task> GetTasks(DataTable Table){ 

    Task NewTask; 

    foreach(DataRow Row in Table){ 
    switch(tasktype){ 
     case tasktypes.TaskTypeA: 
     NewTask = NewTaskA(...); 
     break; 

     case TaskTypes.TaskTypeB: 
     NewTask = NewTaskB(...); 
     break; 
     ... 
    } 

    yield return NewTask; 
    } 
} 

Później można następnie wywołać wirtualnych metod dotyczące zadań w kolejce, jak „konsumować” lub „proces”, na przykład.

Zaletą podejścia fabrycznego (w tym przypadku) jest to, że wystarczy tylko raz włączyć typ zadania (podczas tworzenia zadania) i pozwolić, aby polimorfizm zajmował się wszystkim innym.

+0

nadal możesz zrobić to samo, nie poświęcając klasy do wystąpienia? – BKSpurgeon

1

Co prawda potrzeba faktycznego wykorzystania bardziej bolesnych szczegółów implementacji opisanych przez wzorzec została usunięta dzięki sposobowi działania C#, ale moja funkcjonalność SQL DAL przechodzi przez fabryki obiektów (i polecenia SQL) do funkcji użyteczności, które używają fabryk w celu generowania obiektów. Gdybym nie używał C#, przypuszczam, że mógłbym zamiast tego użyć jawnej klasy fabrycznej, która generuje obiekty.

2

mianowicie w jednym z 2 przypadkach:

  1. klasa nie zna typu obiektu to chce stworzyć, ale po prostu chce się obiekt, który będzie „wykonać zadanie”. EMF wskakuje do umysłu, ponieważ silnie wykorzystuje ten wzorzec.
  2. chcesz, aby podklasy twojej klasy określały typ obiektu, który ma być użyty. np. piszesz swoją klasę rodziców, nie wiedząc, jaki konkretny produkt zostanie stworzony, będzie to odpowiedzialność konkretnego twórcy.
Powiązane problemy