装饰器模式(Decorator)
介绍
结构型模式,为现有对象添加新的功能(装饰),比子类方式更加灵活。
何时使用:在不想增加很多子类的情况下扩展类。主类中新增加的内容只是在某些特殊的情况下才会执行,
优点:
- 改变原有代码的情况下对原有代码中的内容进行扩展,开放封闭原则;
- 每个装饰器完成自己的功能,单一职责。
缺点:
多层装饰比较复杂。
代码实现:
<?php
interface MessageTemplate{
function message();
}
class OldMessageTemplate implements MessageTemplate{
function message(){
return 'old message!';
}
}
abstract class DecoratorMessageTemplate implements MessageTemplate{
public $template;
function __construct($template){
$this->template = $template;
}
}
class NewDecoratorMessage extends DecoratorMessageTemplate{
function message(){
return str_replace('old','new',$this->template->message());
}
}
class Message{
function send($mt){
echo $mt->message().'<br>';
}
}
$message = new Message();
$oldtemplate = new OldMessageTemplate;
$message->send($oldtemplate);
$newtemplate = new NewDecoratorMessage($oldtemplate);
$message->send($newtemplate);