文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

PHP中装饰器模式的示例分析

2023-06-20 12:56

关注

这篇文章主要介绍了PHP中装饰器模式的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。

Gof类图及解释

GoF定义:将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作

GoF类图:

继承式

PHP中装饰器模式的示例分析

组合式

PHP中装饰器模式的示例分析

代码实现

interface Target{    function Request() : void;}

定义一个接口契约,也可以是一个正常的有实现方法的类(后面的例子我们会用类)

class Adapter implements Target{    private $adaptee;    function __constuct($adaptee){        $this->adaptee = $adaptee;    }    function Request() : void {        $this->adaptee->SpecificRequest();    }}

适配器实现这个接口契约,让Request()方法得以实现,但请注意,我们真正调用的其实是Adaptee类中的方法

class Adaptee {    function SpecificRequest() : void{        echo "I'm China Standard!";    }}

又说到我的手机工厂了,这回咱们的生意真的做大了哦!卖到泰国、新加坡、印度尼西亚去了,反正有咖喱的地方都有我们的身影了。据说是我们出了个咖喱色。换壳这事儿可不完全是因为受到诺X亚的影响,而是真的经过长期的调研我们发现不同颜色在不同的地方销量会更好。于是,富X康在原有的手机壳生产线(Target)上为我们加装了一个喷涂适配器(adapter),当我们需要其他颜色的壳时,只需要这个适配器换不同的颜料就好啦(adaptee),直接装上这个喷涂器,新的颜色的手机就诞生了。而当向另外一个国家扩展业务时,我们换颜料就行啦,用太久了不行就连喷头也换掉(是不是想起了连供打印机)

实例

继续发短信,看我能编到什么时候~~~

各位大拿在对接信息、支付类的接口时,经常会使用这些平台提供的SDK。特别是有了Composer之后,安装SDK就更加的方便了,但是,又有一个严重的问题,这帮人做的SDK虽说功能实现大同小异,但命名可是千差万别啊!!我们的系统原来一直使用的阿里云的业务,但是这回要增加极光和百度云的信息功能,一来做个后备,二来根据不同业务使用不同的接口达到安全或节约的目的,有没有办法统一一下他们对外的接口,让我们使用他们的SDK时能够非常方便的和之前使用大家都已经很习惯的阿里云的接口一样呢?当然有,给他们各自都上个适配器呗,实例化的时候大不了外面再套个工厂返回不同的适配器就好啦,只要适配器里的实现方法和阿里云一样就OK啦!

短信发送类图

PHP中装饰器模式的示例分析

<?phpclass Message{    public function send(){        echo "阿里云发送短信!" . PHP_EOL;    }    public function push(){        echo "阿里云发送推送!" . PHP_EOL;    }}class JiguangSDKAdapter extends Message{    private $message;    public function __construct($message){        $this->message = $message;    }    public function send(){        $this->message->send_out_msg();    }    public function push(){        $this->message->push_msg();    }}class JiguangMessage{    public function send_out_msg(){        echo "极光发送短信!" . PHP_EOL;    }    public function push_msg(){        echo "极光发送推送!" . PHP_EOL;    }}class BaiduYunSDKAdapter extends Message{    private $message;    public function __construct($message){        $this->message = $message;    }    public function send(){        $this->message->transmission_msg();    }    public function push(){        $this->message->transmission_push();    }}class BaiduYunMessage{    public function transmission_msg(){        echo "百度云发送短信!" . PHP_EOL;    }    public function transmission_push(){        echo "百度云发送推送!" . PHP_EOL;    }}$jiguangMessage = new JiguangMessage();$baiduYunMessage = new BaiduYunMessage();$message = new Message();// 原来的老系统发短信,使用阿里云$message->send();$message->push();// 部分模块用极光发吧$jgAdatper = new JiguangSDKAdapter($jiguangMessage);$jgAdatper->send();$jgAdatper->push();// 部分模块用百度云发吧$bdAatper = new BaiduYunSDKAdapter($baiduYunMessage);$bdAatper->send();$bdAatper->push();

说明:

感谢你能够认真阅读完这篇文章,希望小编分享的“PHP中装饰器模式的示例分析”这篇文章对大家有帮助,同时也希望大家多多支持编程网,关注编程网行业资讯频道,更多相关知识等着你来学习!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯