以下是一个简单的 PHP 装饰器模式的示例:
// 抽象组件
interface Component {
public function operation();
}
// 具体组件
class ConcreteComponent implements Component {
public function operation() {
return "Concrete Component";
}
}
// 抽象装饰器
abstract class Decorator implements Component {
protected $component;
public function __construct(Component $component) {
$this->component = $component;
}
public function operation() {
return $this->component->operation();
}
}
// 具体装饰器A
class ConcreteDecoratorA extends Decorator {
public function operation() {
return "Concrete Decorator A: " . parent::operation();
}
}
// 具体装饰器B
class ConcreteDecoratorB extends Decorator {
public function operation() {
return "Concrete Decorator B: " . parent::operation();
}
}
// 客户端代码
$component = new ConcreteComponent();
$decoratorA = new ConcreteDecoratorA($component);
$decoratorB = new ConcreteDecoratorB($decoratorA);
echo $decoratorB->operation();
// 输出 "Concrete Decorator B: Concrete Decorator A: Concrete Component"
在这个例子中,Component 是抽象组件接口,定义了操作的方法。ConcreteComponent 是具体组件,实现了具体的操作。
Decorator 是抽象装饰器,它实现了 Component 接口,并持有一个 Component 对象。ConcreteDecoratorA 和 ConcreteDecoratorB 是具体装饰器,它们扩展了 Decorator 并在原有操作的基础上添加了额外的功能。
通过使用装饰器模式,你可以在运行时动态地组合对象的行为,而不是静态地通过继承进行组合。这种设计模式非常有用,特别是当你需要灵活地扩展对象功能时。
转载请注明出处:http://www.pingtaimeng.com/article/detail/11944/PHP