资讯专栏INFORMATION COLUMN

php之装饰者模式

pf_miles / 1666人阅读

装饰者模式概念

动态地将责任附加到对象上,若要扩展功能,装饰者提供了比继承更有弹性的替代方案

装饰者模式结构图

装饰者角色

1.被装饰者基类(Compoent):对象组件
2.待装饰对象(ConcreteComponent):具体组件角色,即将要被装饰增加功能的类
3.装饰者基类(Decorator):需要定义一个与组件接口一致的接口,并持有一个Component对象,该对象其实就是被装饰的对象。
4.具体装饰者(ConcreteDecorator):现具体要向被装饰对象添加的功能。用来装饰具体的组件对象或者另外一个具体的装饰器对象

实例代码
component = $component;
    }

    public function operation()
    {
        $this->component->operation();
    }
}


//具体装饰者类
class ConcreteComponent implements Component{
    public function operation(){
        return "do operation";
    }
}

//具体装饰者a
class ConcreteDecoratorA extends Decorator{

    public function __construct(Component $component)
    {
        parent::__construct($component);
    }

    public function operation()
    {
        parent::operation();
        $this->addOperationA();
    }

    public function addOperationA(){
        return "add operation a";
    }
}

//具体装饰者类b
class ConcreteDecoratorB extends Decorator{

    public function __construct(Component $component)
    {
        parent::__construct($component);
    }

    public function operation()
    {
        parent::operation(); 
        $this->addOperationB();
    }

    public function addOperationB(){
        echo "add operation b";
    }
}

$decoratorA = new ConcreteDecoratorA(new ConcreteComponent());
$decoratorA->operation();
总结

1.装饰者和被装饰者对象有相同的超类型
2.你可以用一个或者多个装饰者包装一个对象
3.既然装饰者和被装饰者对象有相同的超类,所以在任何需要原始对象(被包装的)的场合,可以用装饰过的对象替换他
4.(关键点)装饰者可以在委托被装饰者的行为之前/之后,加上自己的行为,已达到特地的目的
5.对象可以在任何时候被装饰,所以可以在运行时动态的、不限量的用你喜欢的装饰者来装饰对象

参考文献《head first 设计模式》

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/22479.html

相关文章

  • php 设计模式 装饰模式

    摘要:概念装饰模式顾名思义,装饰模式是一种对对象数据的多次过滤,就像装饰一样,一层层的修饰,获取满意的结果。实现装饰者装饰操作这是个洗菜操作。总结当我们需要对数据进行过滤的时候,装饰模式可以成为你的选择 概念: 装饰模式: 顾名思义,装饰模式是一种对对象数据的多次过滤,就像装饰一样, 一层层的修饰, 获取满意的结果。 装饰模式共分为两个部分: 1: 装饰者: 在这个接口接口下面的类和方法用...

    zhkai 评论0 收藏0
  • PHP设计模式装饰模式

    摘要:后盾人人人做后盾定义装饰对象装饰器规范的接口被装饰者后盾网抽象装饰器维护装饰链条的抽象类装饰器用于装饰被装饰者装饰器

    GitCafe 评论0 收藏0
  • Decorator Pattern With Laravel 装饰模式

    摘要:装饰对象包含一个真实对象的引用装饰对象接受所有来自客户端的请求。装饰对象可以在转发这些请求以前或以后增加一些附加功能。在面向对象的设计中,通常是通过继承来实现对给定类的功能扩展。 Decorator Pattern 装饰者模式 纲要: 1. 一个初学者的疑惑 2. 装饰者模式的特点 3. 简单case掌握装饰者模式 4. laravel中装饰者模式的应用 Con...

    roundstones 评论0 收藏0
  • PHP设计模式装饰模式

    摘要:概念装饰器模式允许向一个现有的对象添加新的功能,同时又不改变其结构。这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装。这种模式创建了一个装饰类,用来包装原有的类,并在保持类方法签名完整性的前提下,提供了额外的功能。 概念 装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其结构。这种类型的设计模式属于结构型模式,它是作为现有的类的...

    CloudwiseAPM 评论0 收藏0
  • 设计模式装饰模式

    摘要:相关设计模式装饰者模式和代理模式装饰者模式关注再一个对象上动态添加方法代理模式关注再对代理对象的控制访问,可以对客户隐藏被代理类的信息装饰着模式和适配器模式都叫包装模式关于新职责适配器也可以在转换时增加新的职责,但主要目的不在此。 0x01.定义与类型 定义:装饰模式指的是在不必改变原类文件和使用继承的情况下,动态地扩展一个对象的功能。它是通过创建一个包装对象,也就是装饰来包裹真实的...

    chuyao 评论0 收藏0

发表评论

0条评论

pf_miles

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<