首页 PHP 正文
264

设计模式之装饰者模式

    装饰者模式,动态地将责任附加到对象上。若要扩展功能,装饰者提供了比继承更加有弹性的替代方案。虽然装饰者模式能够动态将责任附加到对象上,但是他会产生许多的细小对象,增加了系统的复杂度。组成角色:
Component: 抽象组件。定义一个对象接口,更多的目的是为了共用类型。
ConcreteComponent:具体组件。定义了一个具体的对象,是被装饰的对象。
Decorator: 抽象装饰类。是装饰抽象类,继承了Component,使所有Decorator子类都统一了类型。它从外类来扩展Component类的功能,但对于Component来说,是无需知道Decorator存在的。
ConcreteDecorator:具体装饰类,起到给Component添加职责的功能。
abstract class Component{
    abstract public function Operation();
}

class ConcreteComponent extends Component{
    public function Operation(){
        return 'ConcreteComponent is called!';
    }
}

abstract class Decorator extends Component{
    protected $component;
    
    public function __construct(Component $component){
        $this->component = $component;
    }
    
    public function Operation(){
        return $this->component->Operation();
    }
}

class ConcreteDecoratorA extends Decorator{
    public function Operation(){
        return parent::Operation().'with concreteDecoratorA,';
    }
}

class ConcreteDecoratorB extends Decorator{
    public function Operation(){
        return parent::Operation().'with concreteDecoratorB,';
    }
}

$component = new ConcreteDecoratorB(new ConcreteDecoratorA(new ConcreteComponent()));
echo $component->Operation();
装饰者模式便于将某个对象的功能进行层层包装,而且这种包装对原始对象是没有任何影响的,而且可以以任何顺序来灵活包装,比如对文字的过滤,可以先过滤html标签再过滤敏感字,也可以反过来,并且可以自由拆装。

正在加载评论...