Dekorator (wzorzec projektowy)/kod
Z Wikiźródeł, repozytorium wolnych materiałów źródłowych
| Dekorator (wzorzec projektowy) Kod źródłowy |
|||
| Kody źródłowe programów stosujących wzorzec projektowy dekoratora |
[edytuj] Java
// interfejs Okno interface Okno { public void rysuj(); // rysuje Okno na ekranie public String pobierzOpis(); // zwraca opis Okna } // implementacja zwykłego okna bez pasków przewijania class ZwykłeOkno implements Okno { public void rysuj() { // rysuj okno } public String pobierzOpis() { return "zwykłe okno"; } }
Poniższe klasy zawierają dekoratory dla wszystkich klas Okno, w tym też dla klas dekoratorów.
// abstrakcyjna klasa dekorator - implementuje interfejs Okno abstract class OknoDekorator implements Okno { protected Okno dekorowaneOkno; // dekorowane Okno public OknoDekorator(Okno dekorowaneOkno) { this.dekorowaneOkno = dekorowaneOkno; } } // pierwszy dekorator dodający pionowe paski przewijania class PionowePrzewijanieDekorator extends OknoDekorator { public PionowePrzewijanieDekorator (Okno dekorowaneOkno) { super(dekorowaneOkno); } public void rysuj() { rysujPionowyPasekPrzewijania(); dekorowaneOkno.rysuj(); } private void rysujPionowyPasekPrzewijania() { // rysuj pionowy pasek przewijania } public String pobierzOpis() { return dekorowaneOkno.pobierzOpis() + ", z pionowym paskiem przewijania"; } } // drugi dekorator dodający poziome paski przewijania class PoziomePrzewijanieDekorator extends OknoDekorator { public PoziomePrzewijanieDekorator (Okno dekorowaneOkno) { super(dekorowaneOkno); } public void rysuj() { rysujPoziomyPasekPrzewijania(); dekorowaneOkno.rysuj(); } private void rysujPoziomyPasekPrzewijania() { // rysuj poziomy pasek przewijania } public String pobierzOpis() { return dekorowaneOkno.pobierzOpis() + ", z poziomym paskiem przewijania"; } }
Program testowy, który tworzy obiekt klasy Okno, dekoruje go poziomymi i pionowymi paskami przewijania i wypisuje jego opis.
public class DekorowaneOknoTest { public static void main(String[] args) { // utwórz dekorowane Okno z poziomymi i pionowymi paskami przewijania Okno dekorowaneOkno = new PoziomePrzewijanieDekorator( new PionowePrzewijanieDekorator(new ZwykłeOkno())); // wypisz opis Okna System.out.println(dekorowaneOkno.pobierzOpis()); } }