Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> wzorzec dekorator
aleksander
post 27.02.2005, 21:04:15
Post #1





Grupa: Przyjaciele php.pl
Postów: 742
Pomógł: 0
Dołączył: 14.12.2003
Skąd: Gdańsk, Trójmiasto

Ostrzeżenie: (0%)
-----


Witam,

chciałem się Was zapytać, czy moje rozumienie dekoratorów jest poprawne. Czytałem o nich na java.com onjava.com i w książce thinking in patterns (http://www.bruceeckel.com/) i na podstawie TIP zrobiłem taki, działający w php zestaw klas
  1. <?php
  2. class Dekorator
  3. {
  4. protected $komponent;
  5.  
  6. public function __construct( $komponent = false )
  7. {
  8. $this->komponent = $komponent;
  9. }
  10. public function wezOpis()
  11. {
  12. if( $this->komponent != false )
  13. {
  14. return $this->komponent->wezOpis() . $this->opis;
  15. } else {
  16. return $this->opis;
  17. }
  18. }
  19.  
  20. public function wezCene()
  21. {
  22. if( $this->komponent != false )
  23. {
  24. return $this->komponent->wezCene() + $this->cena;
  25. } else {
  26. return $this->cena;
  27. }
  28. }
  29. }
  30.  
  31. class KawaEkspresowa extends Dekorator
  32. {
  33. protected $opis = 'To jest kawa ekspresowa.';
  34.  
  35. protected $cena = 5;
  36. }
  37.  
  38. class Mleko extends Dekorator
  39. {
  40. protected $opis = 'To jest mleko do kawy.';
  41.  
  42. protected $cena = 2; 
  43. }
  44.  
  45. class Cukier extends Dekorator
  46. {
  47. protected $opis = 'To jest cukier.';
  48.  
  49. protected $cena = 1;
  50. }
  51.  
  52. $a = new KawaEkspresowa( new Mleko( new Cukier() ) );
  53. echo $a->wezOpis();
  54. echo $a->wezCene();
  55. ?>
Kod
To jest cukier.To jest mleko do kawy.To jest kawa ekspresowa.
8
No i teraz pytanie zasadnicze: czy to jest właśnie dekorator?
Dla używających dekoratorów - gdzie je stosowaliście?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 2)
wolan
post 28.02.2005, 18:15:47
Post #2





Grupa: Zarejestrowani
Postów: 12
Pomógł: 0
Dołączył: 28.10.2004

Ostrzeżenie: (0%)
-----


witaj,

przyjrzyj sie mojavi3. od jakiegos czasu dekoratory sa dostepne w tym frameworku. na wiki nawet jest przyklad global templating z ich uzyciem: http://wiki.mojavi.org/159.html. moze Ci sie rozjasni.

z wyrazami szacunku,
wolan
Go to the top of the page
+Quote Post
hawk
post 1.03.2005, 03:12:49
Post #3





Grupa: Zarejestrowani
Postów: 521
Pomógł: 0
Dołączył: 3.11.2003
Skąd: 3city

Ostrzeżenie: (0%)
-----


@aleksander: Twój przykład dekoratora jest jednak kiepski. Dekorator powinien dziedziczyć z klasy bazowej (to masz, tylko klasę bazową nazywasz Dekorator) i powinien ją "dekorować" dodając funkcjonalność. Problem w tym, że twoje klasy pochodne nie dodają w zasadzie funkcjonalności, tylko bazują na czymś, co zostało już zrobione w klasie bazowej (np. wyliczanie ceny), dostarczając tylko nowe dane. To nie to samo.

Co do przykładów dekoratorów, nie polecałbym frameworków, ponieważ zawsze będzie to przykład specyficzny, charakterystyczny właśnie dla frameworka. A nam chodzi o sam, "czysty" wzorzec. Więc polecam:
- książkę GoF, ew. jakieś internetowe źródło na podstawie tej książki
- jakiś prosty przykład z bibliotek standardowych Javy, które są naszpikowane wzorcami - np. buforowane strumienie I/O
- wzorzec Intercepting Filter

Gdzie stosowałem dekoratory? W wielu przypadkach. Tam gdzie były potrzebne winksmiley.jpg. Nie da się tego opisać w paru słowach, bo nie można rozpatrywać konkretnego zastosowania w oderwaniu od aplikacji.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 14.08.2025 - 03:40