wzorce projektowe zorientowane obiektowo wyjaśnione na praktycznych przykładach

0 Comments

wzorce behawioralne

tego typu wzorce dotyczą komunikacji między obiektami. W większości przypadków zależności między komunikującymi się obiektami są zmniejszane przez te wzorce, co prowadzi do lepszego projektowania oprogramowania.

Łańcuch odpowiedzialności

ten wzorzec tworzy łańcuch obiektów odbiorczych dla żądania. Pozwala to uniknąć łączenia nadawcy żądania z odbiorcą i daje wielu obiektom możliwość obsługi żądania. Obiekty odbierające są ze sobą połączone., W poniższym przykładzie skonstruowany jest łańcuch jednostek middleware. Żądanie, zawierające adres e-mail i hasło, jest przekazywane w łańcuchu. Nowe elementy w łańcuchu można łatwo dodać.

polecenie

we wzorcu polecenia obiekt jest używany do hermetyzacji wszystkich informacji potrzebnych do wykonania akcji lub wyzwalania zdarzenia w późniejszym czasie. Jak pokazano poniżej, ActionOpen definiuje akcję oraz Obiekt, na którym akcja jest wykonywana., Więcej informacji nie jest potrzebne i inny obiekt, tutaj menu, może wykonać akcję.

Interpreter

wzór interpretera definiuje reprezentację gramatyki języka i umożliwia interpretację zdań tego języka. W poniższym fragmencie kodu obiekt Plus może interpretować „operand1 + operand2” i wie, co zrobić z tym wyrażeniem. Można dodać więcej interpreterów bez zbytniej zmiany struktury. Następnie Parser używa interpreterów do zrozumienia danych wejściowych.,

Iterator

Iterator służy do przesuwania kontenera danych w celu uzyskania dostępu do jego elementów bez konieczności znajomości jego struktury. Ponadto można dodawać nowe warianty przejazdu bez zmiany interfejsu obiektów lub samej struktury danych.
ChannelSurfer, przedstawiony poniżej, może uzyskać dostęp do kanałów w sposób ciągły. Obiekt RemoteControl nie musi dbać o organizację kanałów. Na przykład RandomChannelSurfer można dodać bez większych problemów.,

Mediator

Jeśli dwa lub więcej obiektów wymaga współpracy, może zostać zastosowany wzór mediatora. Zwłaszcza jeśli Obiekty się nie znają, jeśli nie powinny być ściśle ze sobą powiązane lub ich interakcja jest złożona, ten wzór może pomóc.
w poniższym przykładzie istnieje pewna interakcja pomiędzy elementami interfejsu użytkownika. Interakcja ta odbywa się poprzez uwierzytelnienie jako mediatora. W ten sposób interakcja nie jest zdefiniowana w jednym z uczestniczących obiektów, ale wyodrębniona do mediatora.,

Memento

wzorzec Memento jest przydatny, jeśli pewien stan obiektu powinien zostać zapisany do późniejszego użycia. Tym samym nie narusza to enkapsulacji szczegółów implementacji tego obiektu. Może być na przykład używany do implementacji mechanizmu cofania.

Observer

we wzorcu observer obiekty observer zapisują się do obserwowalnego obiektu, który jest powiadamiany za każdym razem, gdy obserwowalny zmienia swoje dane., Obserwatory są luźno sprzężone i mogą być dodawane i usuwane w czasie wykonywania.
jeśli chodzi o sposób, w jaki obserwator ostatecznie pobiera dane z obserwowalnego, istnieją dwa warianty: push i pull. Poniższy kod pokazuje wariant pull, który jest bardziej elastyczny, ponieważ w tym przypadku obserwowalny nie musi wiedzieć, w jaki sposób obserwator chce odbierać dane, ale może pobrać dane zgodnie z życzeniem.

Stan

wzorzec Stanu pozwala obiektowi zmieniać jego zachowanie, gdy zmienia się jego stan wewnętrzny., Wzorzec ten jest podobny do wzorca strategii, ale w tym przypadku wewnętrznie decyduje się, jak obiekty zachowują się. Jest to szczególnie pomocne, jeśli złożone warunki określają, jak obiekt powinien się zachowywać. Nowe stany mogą być dodawane niezależnie od istniejących stanów.

Strategia

w kontekście wzorca strategii istnieje wiele wariantów dla jednego algorytmu, gdzie jeden wariant jest wybierany do wykonania w czasie wykonywania.,
w poniższym przykładzie obiekt sprężarki może być używany z jednym z dwóch różnych algorytmów zdefiniowanych w czasie wykonywania. Metoda wykonująca akcję (createArchive) zastosuje następnie wybrany algorytm.

szablon

szablon definiuje strukturę podklas, w których zdefiniowane są kroki algorytmu i ich kolejność. Zapewnia to, że podklasy wykonują dokładnie te same kroki, zapewniając lepszy przegląd i spójność., Pozwala również definiować domyślne implementacje kroków, które mogą być nadpisywane przez podklasy.
Jak pokazano poniżej wszystkie parsery dziedziczące z DataParser wykonują dokładnie te same kroki podczas wykonywania parse (). Zapewnia to na przykład, że wszystkie parsery zamykają pliki i rejestrują status.

Visitor

wzorzec Visitor pozwala zastosować jedną lub więcej operacji do zestawu obiektów w czasie wykonywania bez konieczności operacji ściśle powiązanych ze strukturą obiektu.,
To pozwala zaimplementować double dispatch, gdzie wywołanie funkcji do różnych konkretnych funkcji jest zależne od typu run-time dwóch obiektów. W poniższym przykładzie z jednej strony znajdują się elementy trasy, a z drugiej strony obiekty odwiedzających, które wykonują różne funkcje na elementach trasy. Jeśli w przyszłości pojawi się więcej odwiedzających, element trasy nie musi się zmieniać.


Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *