php装饰模式
php装饰模式与php模板模式相比比类静态方法继承更加灵活 因为不需要改变子类 但是这样的架构大的时候不好调试 找bug!
php装饰模式与php模板模式相比 比类静态方法继承更加灵活 因为不需要改变子类 但是这样的架构大的时候不好调试 找bug!
/** * 抽象构件角色 */ interface Component { /** * 示例方法 */ public function operation(); } /** * 装饰角色 */ abstract class Decorator implements Component{ protected $_component; public function __construct(Component $component) { $this->_component = $component; } public function operation() { //通过对象委派操作 $this->_component->operation(); } } /** * 具体装饰类A */ class ConcreteDecoratorA extends Decorator { public function __construct(Component $component) { parent::__construct($component); } public function operation() { parent::operation(); // 调用装饰类的操作 $this->addedOperationA(); // 新增加的操作 } /** * 新增加的操作A,即装饰上的功能 */ public function addedOperationA() { echo 'Add Operation A <br />'; } } /** * 具体装饰类B */ class ConcreteDecoratorB extends Decorator { public function __construct(Component $component) { parent::__construct($component); } public function operation() { parent::operation();//父类根据对象进行委派 $this->addedOperationB(); } /** * 新增加的操作B,即装饰上的功能 */ public function addedOperationB() { echo 'Add Operation B <br />'; } } /** * 具体构件 */ class ConcreteComponent implements Component{ public function operation() { echo 'Concrete Component operation <br />'; } } /** * 客户端 */ class Client { /** * Main program. */ public static function main() { $component = new ConcreteComponent(); $decoratorA = new ConcreteDecoratorA($component); $decoratorB = new ConcreteDecoratorB($decoratorA); $decoratorA->operation(); $decoratorB->operation(); } } Client::main(); 链接地址:http://www.phppan.com/2010/06/php-design-pattern-4-decorator/
- 上一篇:phpZF框架下类似Google搜索分页
- 下一篇:PHPMailer批量发送邮件
精彩图集
精彩文章