Web Development & WordPress

Decorator Design Pattern

Suppose you know how to create plain Dohsa ( Dohsa class) , and you wanted to add flavor to it. You are thinking to prepare MasalaDohsa and OnionDohsa from this plain Dohsa.

So instead of modifying the main Dohsa class, you can add OnionDohsa and MasalaDohsa class which will extend dohsaDecorator class and add the flavor on the main plain Dohsa.


class Dohsa
{
    function make()
    {
        echo "Plain Dohsa";
    }
}

abstract class dohsaDecorator
{
    protected $dohsa;
    public function __construct(Dohsa $dohsa)
    {
        $this->dohsa = $dohsa;
    }
    abstract public function make();
}
class OnionDosha extends dohsaDecorator
{
    public function make()
    {
        echo $this->dohsa->make() . "With Onion<br>";
    }
}
class MasalaDosha extends dohsaDecorator
{
    function make()
    {
        echo $this->dohsa->make() . " With Masala<br>";
    }
}
$dohsa = new Dohsa();
$onionDohsa = new OnionDosha($dohsa);
$onionDohsa->make();

$masalaDohsa = new MasalaDosha($dohsa);
$masalaDohsa->make();

OUTPUT

Plain DohsaWith Onion
Plain Dohsa With Masala

Leave a comment