algorytm.org

Dekorator (decorator)



Baza Wiedzy
wersja offline serwisu przeznaczona na urządzenia z systemem Android
Darowizny
darowiznaWspomóż rozwój serwisu
Nagłówki RSS
Artykuły
Implementacje
Komentarze
Forum
Bookmarki






Sonda
Implementacji w jakim języku programowania poszukujesz?

Dekorator (decorator)
Ocena użytkowników:***** / 27
SłabyŚwietny 
Wpisany przez Kamil Dworak, 14 sierpnia 2010 20:09

Dekorator (ang. decorator) - wzorzec strukturalny, służy do ulepszania i rozbudowywania obiektów. Załóżmy, że chcemy dodać do jakiejś klasy metodę (niech jeszcze będzie to abstrakcja lub metoda wirtualna, a klasa ta będzie nadklasą dla innych klas). Dzięki dekoratorowi nie musimy tutaj nic modyfikować, możemy nadać obiektowi nowe zachowanie podczas działania programu. Dodatkowo wzorzec ten zapobiega przed eksplozją klas, spowodowaną dużą liczbą rozszerzeń danej klasy (np. kombinacji rożnych składników na pizzy może być mnóstwo!).
Dekorator musi mieć taki sam interfejs jak obiekt, który będziemy dekorować (obiekty dekorujące są tego samego typu co obiekty dekorowane). Do dekoratora przekazujemy dekorowany obiekt. W przeciwieństwie do dziedziczenia, obiekty dostają nowe funkcjonalności dynamicznie ( w trakcie działania programu), a nie na etapie kompilacji. Klient wcale nie musi wiedzieć o działaniu wzorca.
Schemat poniżej ukazuje zastosowanie wzorca:

dekorator



  • Tworzymy dwa obiekty: Mercedes i Fiat.
  • Sprawdzamy ich opis oraz wartość.
  • Rozszerzamy je o klimatyzację, nadpisujemy obiekty o nowe, wywołując konstruktor klasy Klimatyzacja. Do klasy tej przekazaliśmy obiekt, który będziemy dekorować. Teraz przeciążona metoda about wywołuje w sobie oryginalną metodę oraz dodaje do niej informację, o co samochód został wzbogacony.
  • Teraz należy zwiększyć cenę takiego wariantu, pobieramy cenę "czystego" samochodu i dodajemy do niej koszty klimatyzacji.
  • Nasze obiekty s1 i s2 zostały wzbogacone.
  • Adekwatnie postępujemy z dodatkowymi oponami.
  • Na koniec widzimy utworzenie obiektu s3, który już od początku jest udekorowany.




Implementacje
AutorJęzyk
programowania
KomentarzOtwórzPobierzOcena
Kamil DworakC#Visual Studio 2008
.cs
.cs
***** / 7
Kamil DworakC/C++Visual Studio 2008
.cpp
.cpp
***** / 8
Kamil DworakJava
.java
.java
***** / 12
Dariusz RoratPythonImplementacja z uwzględnieniem dowolej marki samochodu i dowolnych dodatków
.py
.py
***** / 1
 
Dodaj własną implementację tego algorytmu
  • Zaloguj się na stronie
Plik:
Język
programowania:
Komentarz:
  By móc dodać implementacje zaloguj się na stronie

Poprawiony: 14 sierpnia 2010 20:18
Dodaj komentarz