State pattern design
Transkrypt
State pattern design
State pattern design 1. Wprowadzenie: State pattern(dosł. Wzorzec zachowania) jest wzorcem zachowania obiektu. Wzorzec używany jest w programowaniu do reprezentowania stanu obiektu. Pozwala on w prosty sposób na częściową zmianę stanu obiektu w trakcie życia instancji obiektu. 2. Wykorzystanie: Załóżmy, że: • Obiekt znajduje się zawsze w jednym z wielu znanych stanów • Stan obiektu determinowany jest zachowaniem kilku metod • W każdej z tych metod można użyć wyrażeń warunkowych if/case Wniosek : Najlepszym rozwiązaniem jest State Pattern ! Podczas modelowania systemów rzeczywistych możemy zauważyć, że pewne obiekty naszego systemu dążą do zmiany swojego stanu w tracie działania programu. Na przykład: • Po zderzeniu się samochodów staja się one wrakami • Przyjaciel jest jednego dnia szczęśliwy innego przygnębiony • Po dodaniu elementu do pustej listy, przestaje być pusta • I wiele innych Samochodem po zderzeniu nie można już jeździć, ale wrak nadal jest fundamentalnie tym samym obiektem, tylko z innym zachowaniem. Przyjaciel pozostaje człowiekiem niezależnie od jego humoru. 3. Model logiczny: Context - klasa, która może posiadać różne stany State - definiuje wspólny interfejs dla wszystkich stanów, dzięki temu są wymienne. ConcreteState - definiuje konkretną definicję stanu. Działanie wzorca jest bardzo proste. Wywołując metodę Handle(), wykorzystywana jest odpowiednia implementacja stanu. Patrząc na powyższy diagram, można odnieść wrażenie, że definicja wzorca jest praktycznie taka sama jak w przypadku wzorca Strategy. Jest jednak mała różnica między tymi dwoma wzorcami: State Pattern: • zbiór zachować opakowanych klasami • w danym momencie klasa odnosi się do jednego z tych stanów • klient nie zna aktualnego (lub bardzo mało wie) stanu obiektu - nie definiuje go jawnie Strategy Pattern: • klient sam definiuje obiekt strategii, który jest wykorzystywany w operacji Możemy także podejść do tego od innej strony: Mówiąc Strategy Pattern myślmy o zastępstwie dla dziedziczenia. Mówiąc State Pattern myślmy o instrukcji if/switch w naszej klasie i wielu sprawdzanych warunkach. 4. Przykład: Przykładem będzie reprezentacja zmiany nastroju człowieka: Człowiek normalnie jest w koszmarnym humorze, uszczęśliwiamy go upajając go procentowymi trunkami. Wysokość promili wyznacza nastrój człowieka