Шема на декоратори во PHP
Пример за имплементација на моделот на декоратори во PHP
1. За моделот на декораторот
Шемата на декоратори е шема за можност за проширување на часовите динамично и многу флексибилно во нивните својства и функции. Основниот принцип е дека постојат една или повеќе таканаречени „бетонски компоненти“, како и еден или повеќе декоратори. Бетонските компоненти ги прошируваат декораторите. Неколку декоратори можат да се комбинираат или „натрупаат“.

Често се наведува примерот за кафе: продавница продава кафе со различни опции како крем, карамела, дополнително млеко или дополнителен шеќер. Во зависност од адитивите, цената, калориите и времето на подготовка на кафето варираат, на пример. Секоја комбинација што може да се замисли треба да биде можна. Следејќи ја декоративната шема, кафето сега е бетонска компонента, додека кремот, карамелот, дополнителното млеко и дополнителниот шеќер се декоратори. Кога се инстанцира декоратор, или предмет за кафе или друг декоратор се пренесува на конструкторот. Ова резултира во комбинации од типот на крем (крем (карамел (кафе))) или на пример ExtraMilch (екстра шеќер (кафе)).
И декораторите и бетонската компонента го имплементираат истиот интерфејс, како резултат на кој на декораторите може да се применат истите функции како и на бетонската компонента. На пример, ако најоддалечениот декоратор го нарече методот getPrice () за комбинацијата ExtraMilch (ExtraZucker (кафе)), тогаш тој може да врати „0,25 € + getPrice () од украсениот предмет“. Соодветно на тоа, тој би го повикал декораторот ExtraZucker, кој додава 0,10 € според истиот принцип и ја прашува цената на кафето.
2. Пример со жици
Во овој пример, моделот на декоратор се применува на "чистењето" на жиците доставени од корисниците. На пример, излишните простори треба да се отстранат и HTML да се кодираат.
Постои специфична компонента „SanitizeableString“ што треба да се украси. Декораторите TrimmedString, EncodeHtml и OnlyAtoZ се достапни за ова. Првиот извршува трим () на украсената низа, EncodeHtml ги кодира HTML-знаците преку htmlentities () и OnlyAtoZ ги отстранува сите знаци што не се во опсег од a до z. На пример, комбинацијата TrimmedString (EncodeHtml (EncodeHtml (SanitizeableString)))) прво би ја кодирала низата од SanitizeableString и потоа ќе ја скрати.