<?php
//The Decorator Pattern provides a flexible alternative to subclassing. Decorator allows you to modify
//objects dynamically, adding capabilities without causing an explosion of subclasses
interface SomeBaseInterface {
public function doSomething();
}
class SomeBaseClass implements SomeBaseInterface {
public function __construct() {
}
public function doSomething() {
return $this->doSomethingPrivate() . '.....';
}
private function doSomethingPrivate() {
return 'Test text from SomeBaseClass';
}
}
class SomeBaseClassDecorator {
protected $baseClass;
public function __construct($base) {
$this->baseClass = $base;
}
public function doSomething() {
$this->baseClass->doSomething();
}
}
class ExtendedSomeBaseClassDecorator extends SomeBaseClassDecorator {
protected $moreText = 'More!!!';
public function __construct($more, $someBaseInterfaceExtender) {
$this->moreText = $more;
parent::__construct($someBaseInterfaceExtender);
}
public function doSomething() {
return $this->baseClass->doSomething() . $this->moreText;
}
}
$decorator = new ExtendedSomeBaseClassDecorator(" decorator text", new SomeBaseClass() );
echo $decorator->doSomething();
//The Decorator Pattern provides a flexible alternative to subclassing. Decorator allows you to modify
//objects dynamically, adding capabilities without causing an explosion of subclasses
interface SomeBaseInterface {
public function doSomething();
}
class SomeBaseClass implements SomeBaseInterface {
public function __construct() {
}
public function doSomething() {
return $this->doSomethingPrivate() . '.....';
}
private function doSomethingPrivate() {
return 'Test text from SomeBaseClass';
}
}
class SomeBaseClassDecorator {
protected $baseClass;
public function __construct($base) {
$this->baseClass = $base;
}
public function doSomething() {
$this->baseClass->doSomething();
}
}
class ExtendedSomeBaseClassDecorator extends SomeBaseClassDecorator {
protected $moreText = 'More!!!';
public function __construct($more, $someBaseInterfaceExtender) {
$this->moreText = $more;
parent::__construct($someBaseInterfaceExtender);
}
public function doSomething() {
return $this->baseClass->doSomething() . $this->moreText;
}
}
$decorator = new ExtendedSomeBaseClassDecorator(" decorator text", new SomeBaseClass() );
echo $decorator->doSomething();