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批量发送邮件
精彩图集
精彩文章






