目录

代码示例

<?php


namespace DesignPattern;

/**
 * Description of DecoratorDemo
 * 裝飾器
 * @author jm
 */
class DecoratorDemo
{
    //put your code here
    public static function main()
    {
        (new Decorator(new Source()))->method();
    }
}


interface ISource {  
    public function method();  
}  
class Source implements ISource {  
  
    public function method() {  
        print_r("原类及方法method.\n");  
    }  
}
class Decorator implements ISource {  
  
    /**
     *
     * @var Source 
     */
    private $_source;  
      
    public function __construct($source){  
        $this->_source = $source;
    }  
    public function method() {  
        print_r("装饰器---\n");  
        $this->_source->method();
        print_r("装饰器尾巴----\n");  
    }  
}

DecoratorDemo::main();

输出:

装饰器---
原类及方法method.
装饰器尾巴----

场景

1、需要扩展一个类的功能。

2、动态的为一个对象增加功能,而且还能动态撤销。(继承不能做到这一点,继承的功能是静态的,不能动态增删。)

缺点:产生过多相似的对象,不易排错!

小结

装饰模式,动态地给一个对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类更为灵活。

装饰模式是为已有功能动态的添加更多功能的一种方式。

当系统需要新功能的时候,是向旧的类中添加新的代码。这些新的代码通常装饰了原有类的核心职责或主要行为。

装饰模式的优点就是把类中的装饰功能从类中搬移去除,这样可以简化原有的类。

有效地把类的核心职责和装饰功能区分开了,而且可以去除相关类中的重复的装饰逻辑。


本文部分收藏来自互联网,仅用于学习研究,著作权归原作者所有,如有侵权请联系删除

markdown @TsingChan