php与设计模式之装饰模式

本文介绍了装饰模式的概念及其在PHP中的实现方式。装饰模式允许在不改变原有类的情况下为其添加新的功能,提高了系统的灵活性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  装饰模式是面相对象编程的一种设计模式。装饰模式能动态地往子类中添加新的行为。就功能而言,修饰模式相比生成子类更为灵活,这样可以给某个对象而不是整个类添加一些功能。
。原理是:增加一个修饰类包裹原来的类,包裹的方式一般是通过在将原来的对象作为修饰类的构造函数的参数。装饰类实现新的功能,但是,在不需要用到新功能的地方,它可以直接调用原来的类中的方法。修饰类必须和原来的类有相同的接口。

  修饰模式是类继承的另外一种选择。类继承在编译时候增加行为,而装饰模式是在运行时增加行为。当有几个相互独立的功能需要扩充时,这个区别就变得很重要。在有些面向对象的编程语言中,类不能在运行时被创建,通常在设计的时候也不能预测到有哪几种功能组合。这就意味着要为每一种组合创建一个新类。相反,修饰模式是面向运行时候的对象实例的,这样就可以在运行时根据需要进行组合。其类图为:
装饰器模式
php语言实现装饰模式

//组件接口
interface Component {
    //操作方法
    public function opreation();
}

//具体的被装饰者类
class ConcreteComponet implements Component {
    public function opreation() {
        echo "ConcreteComponet\'s opreation";
    }
}

//装饰类
class Decorator implements Component {
    protected $component = null;
    //引用Component对象
    public function __construct(Component $component) {
        $this->component = $component;
    }
    public function opreation() {
        $this->component->operation();
    }
}

//具体装饰类
class ConcreteDecoratorA extends Decorator {
    //在父类的基础上扩展新的方法
    public function operation() {
        parent::operation();
        echo 'add ConcreteDecoratorA';
    }
}

//客户端调用
$componet = new ConcreteComponent();
$ConcreteDecoratorA = new ConcreteDecoratorA($component);
$ConcreteDecoratorA->operation();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值