Díszítő minta PHP-ben
Példa a dekoratorminta megvalósítására a PHP-ben
1. A díszítő mintáról
A dekoratőr mintája az osztályok dinamikus és nagyon rugalmas tulajdonságainak és funkcióinak kiterjesztésére szolgál. Az alapelv az, hogy van egy vagy több úgynevezett "betonelem", valamint egy vagy több dekorátor. A beton alkatrészeket a dekorátorok kibővítik. Több dekorátor kombinálható vagy "egymásra rakható".

A kávé példájára gyakran hivatkoznak: egy bolt különféle lehetőségekkel, például tejszínnel, karamellával, extra tejjel vagy extra cukorral kávét árul. Az adalékoktól függően például a kávé ára, kalóriája és elkészítési ideje változik. Minden elképzelhető kombinációnak lehetségesnek kell lennie. A lakberendezési mintát követve ma már a kávé a betonkomponens, míg a tejszín, a karamell, az extra tej és az extra cukor a díszítõ. A dekorátor példányosításakor vagy egy kávétárgyat, vagy egy másik dekorátort adnak át a kivitelezőnek. Ennek eredményeként a krém típusa (krém (karamell (kávé))) vagy például ExtraMilch (extra cukor (kávé)) kombinációkat eredményez.
A dekorátorok és a betonelem is ugyanazt az interfészt valósítják meg, így ugyanazok a funkciók alkalmazhatók a dekorátorokra, mint a betonelemekre. Például, ha a legkülső dekoratőr a getPrice () metódust hívta meg az ExtraMilch (ExtraZucker (kávé)) kombinációra, akkor a „0,25 € + getPrice () értéket adhatta vissza a díszített tárgyról”. Ennek megfelelően felhívja az ExtraZucker dekoratőrt, aki ugyanezen elv alapján 0,10 eurót tesz hozzá, és kéri a kávé árát.
2. Példa húrokkal
Ebben a példában a díszítő mintát a felhasználók által benyújtott húrok "tisztítására" alkalmazzák. Például a felesleges szóközöket el kell távolítani és HTML kódolni kell.
Van egy speciális "SanitizeableString" komponens, amelyet fel kell díszíteni. Ehhez a TrimmedString, az EncodeHtml és a OnlyAtoZ dekorátorok állnak rendelkezésre. Az előbbi egy trim-ot () hajt végre a díszített karaktersorozaton, az EncodeHtml kódolja a HTML-karaktereket htmlentities () segítségével, a OnlyAtoZ pedig eltávolít minden olyan karaktert, amely nem tartozik az a-tól z-ig. Például a TrimmedString (EncodeHtml (EncodeHtml (SanitizeableString)) kombináció először duplázza a SanitizeableString karakterláncát, majd levágja.