Mega Code Archive

 
Categories / Php / Design Patterns
 

Design Patterns Decorator

<?   class Name {     private $firstName;     private $lastName;     function __construct($lastName_in, $firstName_in) {       $this->firstName = $firstName_in;       $this->lastName  = $lastName_in;     }     function getFirstName() {         return $this->firstName;     }     function getLastName() {         return $this->lastName;     }     function getFirstNameAndLastName() {       return $this->getLastName() . ' by ' . $this->getFirstName();     }   }   class LastNameDecorator {        protected $name;   public $lastName;        public function __construct(Name $name_in) {     $this->name = $name_in;       $this->resetLastName();     }      function resetLastName() {     $this->lastName = $this->name->getLastName();   }     function showLastName() {     return $this->lastName;   }   }         class LastNameExclaimDecorator extends LastNameDecorator {        private $btd;     public function __construct(LastNameDecorator $btd_in) {        $this->btd = $btd_in;     }     function exclaimLastName() {        $this->btd->lastName = "!" . $this->btd->lastName . "!";   }   }   class LastNameStarDecorator extends LastNameDecorator {   private $btd;     public function __construct(LastNameDecorator $btd_in) {     $this->btd = $btd_in;     }     function starLastName() {     $this->btd->lastName = Str_replace(" ","*",$this->btd->lastName);   }   }            $patternName = new Name("A","B");            $decorator = new LastNameDecorator($patternName);   $starDecorator = new LastNameStarDecorator($decorator);   $exclaimDecorator = new LastNameExclaimDecorator($decorator);      echo $decorator->showLastName();      $exclaimDecorator->exclaimLastName();   $exclaimDecorator->exclaimLastName();   echo $decorator->showLastName();      $starDecorator->starLastName();   echo $decorator->showLastName();      echo $decorator->resetLastName();   echo $decorator->showLastName();       ?>