Staram się edukować moich kolegów w zakresie wzorców projektowych. Niektóre z oryginalnych wzorców Gang of Four są trochę ezoteryczne, więc zastanawiam się, czy istnieje podgrupa „niezbędnych” wzorców, którą wszyscy programiści powinni znać. Przeglądając listę, myślę, że prawdopodobnie użyłem -
- Fabryka abstrakcyjna
- Metoda fabryczna
- Singel
- Most
- Fasada
- Komenda
Z których faktycznie korzystasz i do czego je wykorzystujesz?
design-patterns
Craig Schwarze
źródło
źródło
for, if, while...
etc” - trudno zmierzyć, jak bezcelowe byłoby to.Odpowiedzi:
Oto lista tych, z których korzystałem lub widziałem w praktyce:
Singleton - obiekt aplikacji w ASP.Net będący tego najlepszym przykładem.
Adapter - Łączenie z bazami danych zwykle może obejmować klasę Adaptera przynajmniej w moim obszarze .Net.
Fabryka - ogólne informacje na temat generowania obiektów, chociaż widziałem to więcej w niektórych starszych klasycznych ASP w tamtych czasach.
Strategia - miałem aplikację, która dla każdego typu urządzenia miała podobną strukturę dla klasy, że rozważałbym implementację tego wzorca.
Fasada - pod pewnymi względami jest to podobne do wzorca adaptera, ponieważ jest czymś, co łączy ze sobą zwykle kilka systemów.
źródło
Autorzy opracowali wzory z zaobserwowanych projektów, które znaleźli w rzeczywistych zastosowaniach. Nikt prawdopodobnie nie użyje ich wszystkich, ale wszystkie są wykorzystywane.
źródło
Dekorator .
EDYCJA : W prawie każdym projekcie, który wychodzi poza „trywialny” etap, kończy się interfejsem IAction (szczegóły mogą się różnić):
Następną godzinę spędzam na pisaniu wielu małych, prawie trywialnych zajęć, które wdrażają IAction. W połączeniu są bardzo mocne i elastyczne.
Np.
LogAction
An (napisz, aby zalogować i wykonać IAction),NullAction
(nic nie rób i zwróć true),ActionList
(wykonaj listę IAction i zwróć ANDing booli). W niektórych przypadkachAndAction
(zwróć AND dwóch akcji, może być zwarty lub nie)OrAction
,NotAction
ma również sens.Chociaż technicznie z powyższych przykładów tylko LogAction jest dekoratorem (drugi nie działa dokładnie na 1 IAction), nadal uważam to za uogólnienie wzoru Dekoratora, kiedy tworzę ActionList LogAction z IAction.
źródło
Zakładam, że masz zamiar ograniczyć pytanie do użycia wzorców we własnym kodzie / projektach (bez bibliotek klas i frameworków stron trzecich).
Podobnie jak inni, najczęściej używałem również wzorów Factory . Następnie
źródło
Użyłem wielu innych, o których już wspomniano (Singleton, Factory, Builder, Command, Strategy itp.)
Jednym, o którym jeszcze nie wspominałem, jest Flyweight, którego często używam. Poniżej podałem przykładową implementację:
źródło
Większość oryginalnych wzorów Gang of Four jest nadal używana, ale są też inne popularne obecnie, których nie ma w książce.
Znajdź referencje dla Design Patters w języku, którego używasz. Zwykle są bardziej konkretne i wykorzystują określone funkcje językowe do implementacji wzorców w bardziej zwięzły i elegancki sposób.
Trzy świetne zasoby dotyczące Wzorów Projektowych:
Książka „Head First Design Patterns” - językiem z wyboru jest Java, ale dotyczy wszystkich języków. Wzorce projektowe dofactory - świetne i darmowe objaśnienia wzorców projektowych .net z kodem. PluralSight - Biblioteka wzorców projektowych - ta jest płatna, ale jest zbyt dobra, aby nie uwzględniać jej na liście.
źródło
Cóż, jeśli korzystasz ze zwykłych bibliotek, takich jak ACE, ostatecznie używasz więcej, niż myślisz. Używam Observer / Observable intensywnie :-)
źródło
Użyłem Konstruktora co najmniej raz (ten sam proces konwertera mógł zbudować dane wyjściowe HTML lub Excel).
Często używam metody szablonów (do zadań związanych z JDBC lub abstrakcyjnych kontrolerów Swing).
Kiedyś musiałem opracować wiele nowych funkcji w aplikacji opartej na formularzu, co było bałaganem. Mogłem się rozwijać dopiero po przebudowaniu istniejących rzeczy na rozwiązanie oparte na wzorcach państwowych. (Cóż, większość).
Często używam również poleceń (Swing Actions), a także obserwatorów.
Kiedyś użyłem rozwiązania przypominającego Mememento do wykrywania zmian w formularzach Swing. Formularz serializowałby swój stan, co porównałem (równa się ()) z wcześniejszymi stanami.
źródło
Wierzę, że mam ich najwięcej w całej mojej karierze. jedyny, którego jestem pewien, że nie użyłem, to wzorzec adaptera, który został zaimplementowany z wielokrotnym dziedziczeniem w książce, ponieważ nie jestem wielkim fanem wielokrotnego dziedziczenia.
źródło
Lubię dekoratora. Jedyne, co dodałem do wymienionych, to Proxy.
źródło