装饰模式
当想对现有的类的功能,添加新功能的时候,同时又不改变原来功能的结构,这种模式是通过新创建一个装饰类来包装原来的类,也就是通过给装饰类传入原来类,然后在装饰的功能上通过传进来的类调用原来的方法,然后再去实现新功能
比较
- 和桥接模式
装饰模式是单维度的添加修改,而桥接模式是多维度的
class Base
{
public $txt;
protected $obj;
public function __construct($Txt)
{
$this->txt = $Txt;
}
public function decoratorTxt()
{
echo $this->txt;
}
}
class DecoratorOne extends Base
{
public function __construct(Base $base)
{
$this->obj = $base;
}
public function decoratorTxt()
{
echo $this->obj->decoratorTxt();
echo '装饰1';
}
}
class DecoratorTwo extends Base
{
public function __construct(Base $base)
{
$this->obj = $base;
}
public function decoratorTxt()
{
echo $this->obj->decoratorTxt();
echo '装饰2';
}
}
$text = new DecoratorTwo(new DecoratorOne(new Base('原始')));
echo $text->decoratorTxt();