Pobierz prezentację
Pobieranie prezentacji. Proszę czekać
OpublikowałDobrosław Wojtczuk Został zmieniony 11 lat temu
1
Obiektowe metody projektowania systemów Design Patterns STRATEGY
2
Wstęp: Strategy (strategia): - należy do tzw. behawioralnych wzorców projektowych, czyli charakteryzujących oddziaływania pomiędzy obiektami. - ma za zadanie zdefiniowanie rodziny algorytmów i rozdzielenie ich tak aby działały zależnie od potrzeb klienta
3
Plan: Zastosowanie Struktura Kosekwencje (zalety i wady) Implementacja Przykład kodu Zakończenie
4
Zastosowanie Strategię stosujemy jeśli: Wiele powiązanych klas różni się tylko zachowaniem. Potrzeba kilku wariantów algorytmu. Algorytm używa danych o których klient nie powinien wiedzieć. Klasa definiuje wiele zachowań jako wielokrotne instrukcje warunkowe.
5
Struktura
6
Struktura - powiązania Klasy Strategy i Context współdziałają aby zaimplementować wybrany algorytm. Context przekazuje żądanie klienta do odpowiedniej strategii.
7
Konsekwencje Zalety Strategia pozwala utworzyć rodziny powiązanych algorytmów. Hermetyzacja algorytmów w oddzielnych klasach pozwala na ich modyfikację niezależnie od kontekstu, zwiększa czytelność, oraz łatwość rozbudowy. Eliminuje instrukcje wyboru (warunkowe).
8
Konsekwencje Wady Klient musi być świadomy różnych algorytmów, aby mógł wybrać właściwy. Nadmiarowa komunikacja pomiędzy Strategy i Context. Zwiększona liczba obiektów.
9
Implementacja Interfejsy klas Context i Strategy Strategia jako szablon Strategia jako rozwiązanie opcjonalne
10
Przykładowy kod 1 class Composition { private: Compositor* compositor1; Component* components1; int lineWidth; public: Composition(Compositor*); void Repair(); };
11
Przykładowy kod 2 class Compositor { public: virtual int Compose(int lineWidth) = 0; protected: Compositor(); }; Class SimpleCompositor : public Compositor { public: SimpleCompositor(); int Compose(int lineWidth); //... }; class TeXCompositor : public Compositor { public: TeXCompositor(); int Compose(int lineWidth); //... };
12
Przykładowy kod 3 void Composition::Repair () { int breakCount; breakCount = compositor1->Compose(lineWidth); } Composition* quick = new Composition(new SimpleCompositor); Composition* slick = new Composition(new TeXCompositor);
13
Podsumowanie: Strategia umożliwia zdefiniowanie rodziny algorytmów realizujących to samo zadanie, ale różniących się implementacją Strategia zwiększa czytelność programu i ułatwia jego późniejszą modyfikację.
14
Bibliografia: Stroustrup B.: The C++ Programming Language, Addison-Wesley, 2004 Shalloway A., Trott J.R.: Projektowanie zorientowane obiektowo. Wzorce projektowe, Helion 2002 Gamma E., Helm R., Johnson R., Vlissides R.:Design Patterns: Elements of Reusable Object-Oriented Software
15
Fin
Podobne prezentacje
© 2024 SlidePlayer.pl Inc.
All rights reserved.