15-装饰模式
目录
代码示例
<?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 9ong@TsingChan