Model de decorator în PHP

Exemplu de implementare a modelului decorator în PHP

1. Despre modelul decorator

Modelul decorator este un model pentru posibilitatea de a extinde clasele dinamic și foarte flexibil în proprietățile și funcțiile lor. Principiul de bază este că există una sau mai multe așa-numitele „componente din beton”, precum și unul sau mai mulți decoratori. Componentele din beton sunt extinse de către decoratori. Mai mulți decoratori pot fi combinați sau „stivați”.

decorator este

Exemplul de cafea este adesea citat: un magazin vinde cafea cu diverse opțiuni, cum ar fi smântână, caramel, lapte suplimentar sau zahăr suplimentar. În funcție de aditivi, prețul, caloriile și timpul de preparare al cafelei variază, de exemplu. Fiecare combinație imaginabilă ar trebui să fie posibilă. Urmând modelul decoratorului, cafeaua este acum componenta beton, în timp ce smântâna, caramelul, laptele în plus și zahărul în plus sunt decoratorii. Atunci când un decorator este instanțiat, fie un obiect de cafea, fie un alt decorator este transmis constructorului. Acest lucru are ca rezultat combinații de tipul de cremă (smântână (caramel (cafea))) sau, de exemplu, ExtraMilch (zahăr suplimentar (cafea)).

Atât decoratorii, cât și componenta de beton implementează aceeași interfață, prin care aceleași funcții pot fi aplicate decoratorilor ca și componenta de beton. De exemplu, dacă decoratorul cel mai exterior a apelat metoda getPrice () pentru combinația ExtraMilch (ExtraZucker (cafea)), atunci el ar putea returna „0,25 € + getPrice () din obiectul decorat”. În consecință, el va apela la decoratorul ExtraZucker, care adaugă 0,10 EUR conform aceluiași principiu și cere prețul cafelei.

2. Exemplu cu șiruri

În acest exemplu, modelul decorator este aplicat șirurilor de „curățare” trimise de utilizatori. De exemplu, spațiile inutile ar trebui eliminate și codificate HTML.

Există o componentă specifică „SanitizeableString” care urmează să fie decorată. Decoratorii TrimmedString, EncodeHtml și OnlyAtoZ sunt disponibili pentru acest lucru. Primul execută un trim () pe șirul decorat, EncodeHtml codifică caracterele HTML prin htmlentities () și OnlyAtoZ elimină toate caracterele care nu sunt în intervalul de la a la z. De exemplu, combinația TrimmedString (EncodeHtml (EncodeHtml (SanitizeableString))) va codifica mai întâi șirul de la SanitizeableString și apoi îl va tăia.