Kiedy używać jakiego wzorca projektowego? [Zamknięte]

104

Bardzo lubię wzorce projektowe, ale trudno mi zobaczyć, kiedy mogę je zastosować. Czytałem wiele stron internetowych, w których wyjaśniono wzorce projektowe. Rozumiem większość z nich, ale trudno mi rozpoznać prawidłowość w moich własnych sytuacjach.

Dlatego zadaję to pytanie. Czy są jakieś wytyczne / dzwonki alarmowe, kiedy należy użyć danego wzorca projektowego.

Na przykład, jeśli wykonujesz instrukcję switch, aby określić, który obiekt ma zostać utworzony, prawdopodobnie będziesz chciał użyć wzorca projektowego fabryki. Zatem instrukcja switch w tym przypadku jest „dzwonkiem alarmowym” używającym wzorca Factory.

Czy znasz więcej „dzwonków alarmowych”, aby określić wzór projektu?

Martijn
źródło
6
Zwykle opisy wzorów, które widzę, zawierają opis sytuacji, w których chciałbyś, aby ten wzorzec projektowy.
R. Martinho Fernandes,

Odpowiedzi:

99

Zwykle proces jest odwrotny. Nie szukaj sytuacji, w których można zastosować wzorce projektowe, szukaj kodu, który można zoptymalizować. Gdy masz kod, który Twoim zdaniem ma nieprawidłową strukturę. spróbuj znaleźć wzór projektowy, który rozwiąże problem.

Wzorce projektowe mają pomóc w rozwiązywaniu problemów strukturalnych, nie należy projektować aplikacji tylko po to, aby móc używać wzorców projektowych.

Joep Killaars
źródło
23
Nie tylko problemy strukturalne, ale także behawioralne i twórcze.
DevDemon
1
Wzorce projektowe mogą przyspieszyć proces rozwoju, zapewniając przetestowane, sprawdzone paradygmaty rozwoju. Efektywne projektowanie oprogramowania wymaga uwzględnienia problemów, które mogą pojawić się dopiero w dalszej części implementacji. Ponowne użycie wzorców projektowych pomaga zapobiegać subtelnym problemom, które mogą powodować poważne problemy, i poprawia czytelność kodu dla programistów i architektów zaznajomionych z wzorcami.
SaddamBinSyed
5

Naucz się ich, a powoli będziesz w stanie ponownie je poznać i dowiedzieć się, kiedy ich używać. Zacznij od czegoś prostego, jak wzorzec singletona :)

jeśli chcesz utworzyć jedną instancję obiektu i tylko JEDNĄ. Używasz wzorca singleton. Powiedzmy, że tworzysz program z obiektem opcji. Nie chcesz kilku takich, to byłoby głupie. Singleton dba o to, aby nigdy nie było więcej niż jednego. Wzór singletona jest prosty, często używany i naprawdę skuteczny.

Peter Rasmussen
źródło
17
Singleton nie jest tak naprawdę do sytuacji, gdy potrzebujesz tylko jednej instancji. Singleton służy do ograniczania się do jednej instancji. Gdy potrzebujesz tylko jednej instancji, możesz spróbować po prostu utworzyć tylko jedną instancję i użyć jej.
R. Martinho Fernandes
Ponadto, chociaż singleton jest bardzo przydatny i potrzebny w niektórych miejscach, jest również bardzo łatwy do zaimplementowania, gdy nie jest potrzebny. Jak sugerujesz tutaj i jak zauważył Fernandes, prawdopodobnie tego nie potrzebujesz. W rzeczywistości użycie wzorca singleton jest dobrym znakiem możliwego (prawdopodobnie) zapachu kodu. Używanie go do klasy usług jest bardziej niż prawdopodobne, że będzie to zapach kodu. Wygląda na to, że potrzebujesz DI, a nie singletona. Niektórzy używają ich w ten sposób. Szczególnie w przypadku małego (nieważnego) kodu lub POC. Ale jak powiedziałem, jest kilka skutecznych zastosowań. Nie znajduj łatwego sposobu na zrobienie czegoś i po prostu zrób to.
Suamere
4

Całkowicie zgadzam się z @Peter Rasmussen.

Wzorce projektowe zapewniają ogólne rozwiązanie powszechnie występującego problemu projektowego.

Chciałbym, abyś postępował zgodnie z poniższym podejściem.

  1. Zrozum intencję każdego wzoru
  2. Zapoznaj się z listą kontrolną lub przypadkiem użycia każdego wzoru
  3. Pomyśl o rozwiązaniu swojego problemu i sprawdź, czy Twoje rozwiązanie mieści się na liście kontrolnej określonego wzorca
  4. Jeśli nie, po prostu zignoruj ​​wzorce projektowe i napisz własne rozwiązanie.

Przydatne linki:

sourcemaking : pięknie wyjaśnia intencje , strukturę i listę kontrolną w wielu językach, w tym C ++ i Java

wikipedia : Wyjaśnia strukturę, diagram UML i przykłady robocze w wielu językach, w tym C # i Java.

Lista kontrolna i praktyczne zasady w każdym wzorcu projektowania źródła zapewniają dzwonek alram, którego szukasz.

Ravindra babu
źródło