装饰器模式是一种结构型设计模式,它允许你通过将对象封装在装饰器类中,动态地添加新行为或责任。装饰器模式提供了比继承更灵活的替代方案,因为它允许你在运行时动态组合对象的行为。

以下是一个简单的 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