PHP设计模式之装饰模式(Decorator)代码实例大全(14)

目的

动态地为类的实例添加功能

例子

  • Zend Framework: Zend_Form_Element 实例的装饰者

  • Web Service层:REST服务的JSON与XML装饰器(当然,在此只能使用其中的一种)

UML图

PHP设计模式之装饰模式(Decorator)代码实例大全(14)_第1张图片

★官方PHP高级学习交流社群「点击」管理整理了一些资料,BAT等一线大厂进阶知识体系备好(相关学习资料以及笔面试题)以及不限于:分布式架构、高可扩展、高性能、高并发、服务器性能调优、TP6,laravel,YII2,Redis,Swoole、Swoft、Kafka、Mysql优化、shell脚本、Docker、微服务、Nginx等多个知识点高级进阶干货

代码

  • RenderableInterface.php

  • Webservice.php

data = $data;
    }

    /**
    * 实现 RenderableInterface 渲染接口中的 renderData() 方法。
    * 返回传入的数据。
    */
    public function renderData(): string
    {
        return $this->data;
    }
}
  • RendererDecorator.php

wrapped = $renderer;
    }
}
  • XmlRenderer.php

wrapped->renderData();
        $doc->appendChild($doc->createElement('content', $data));

        return $doc->saveXML();
    }
}
  • JsonRenderer.php

wrapped->renderData());
    }
}

测试

  • Tests/DecoratorTest.php

service = new Decorator\Webservice('foobar');
    }

    /**
    * 测试 JSON 装饰者。
    * 这里的 assertEquals 是为了判断返回的结果是否符合预期。
    */
    public function testJsonDecorator()
    {
        $service = new Decorator\JsonRenderer($this->service);

        $this->assertEquals('"foobar"', $service->renderData());
    }

    /**
    * 测试 Xml 装饰者。
    */
    public function testXmlDecorator()
    {
        $service = new Decorator\XmlRenderer($this->service);

        $this->assertXmlStringEqualsXmlString('foobar', $service->renderData());
    }
}

PHP 互联网架构师成长之路*「设计模式」终极指南

PHP 互联网架构师 50K 成长指南+行业问题解决总纲(持续更新)

面试10家公司,收获9个offer,2020年PHP 面试问题

★如果喜欢我的文章,想与更多资深开发者一起交流学习的话,获取更多大厂面试相关技术咨询和指导,欢迎加入我们的群啊,暗号:phpzh(君羊号码856460874)。

2020年最新PHP进阶教程,全系列!

PHP设计模式之装饰模式(Decorator)代码实例大全(14)_第2张图片

内容不错的话希望大家支持鼓励下点个赞/喜欢,欢迎一起来交流;另外如果有什么问题 建议 想看的内容可以在评论提出

你可能感兴趣的:(PHP设计模式之装饰模式(Decorator)代码实例大全(14))