• 技术文章 >后端开发 >php教程

    一起聊聊PHP中的策略模式

    青灯夜游青灯夜游2021-07-10 09:04:47转载628
    在之前的文章《深入浅析PHP中的命令模式》中我们介绍了PHP中的命令模式,下面本篇文章带大家了解一下PHP中的策略模式。

    策略模式,又称为政策模式,属于行为型的设计模式。

    Gof类图及解释

    GoF定义:定义一系列的算法,把它们一个个封装起来,并且使它们可以相互替换。本模式使得算法可独立于使用它的客户而变化 。

    GoF类图

    1.jpg

    代码实现

    interface Strategy{
        function AlgorithmInterface();
    }
    
    class ConcreteStrategyA implements Strategy{
        function AlgorithmInterface(){
            echo "算法A";
        }
    }
    
    class ConcreteStrategyB implements Strategy{
        function AlgorithmInterface(){
            echo "算法B";
        }
    }
    
    class ConcreteStrategyC implements Strategy{
        function AlgorithmInterface(){
            echo "算法C";
        }
    }

    定义算法抽象及实现。

    class Context{
        private $strategy;
        function __construct(Strategy $s){
            $this->strategy = $s;
        }
        function ContextInterface(){
            
            $this->strategy->AlgorithmInterface();
        }
    }

    定义执行环境上下文。

    $strategyA = new ConcreteStrategyA();
    $context = new Context($strategyA);
    $context->ContextInterface();
    
    $strategyB = new ConcreteStrategyB();
    $context = new Context($strategyB);
    $context->ContextInterface();
    
    $strategyC = new ConcreteStrategyC();
    $context = new Context($strategyC);
    $context->ContextInterface();

    最后,在客户端按需调用合适的算法。

    既然和简单工厂如此的相像,那么我们也按照简单工厂的方式来说:我们是一个手机厂商(Client),想找某工厂(ConcreteStrategy)来做一批手机,通过渠道商(Context)向这个工厂下单制造手机,渠道商直接去联系代工厂(Strategy),并且直接将生产完成的手机发货给我(ContextInterface())。同样的,我不用关心他们的具体实现,我只要监督那个和我们联系的渠道商就可以啦,是不是很省心!

    完整代码:https://github.com/zhangyue0503/designpatterns-php/blob/master/10.strategy/source/strategy.php

    实例

    依然还是短信功能,具体的需求可以参看简单工厂模式中的讲解,但是这回我们使用策略模式来实现!

    短信发送类图

    2.jpg

    完整源码:https://github.com/zhangyue0503/designpatterns-php/blob/master/10.strategy/source/strategy-message.php

    <?php
    
    interface Message
    {
        public function send();
    }
    
    class BaiduYunMessage implements Message
    {
        function send()
        {
            echo '百度云发送信息!';
        }
    }
    
    class AliYunMessage implements Message
    {
        public function send()
        {
            echo '阿里云发送信息!';
        }
    }
    
    class JiguangMessage implements Message
    {
        public function send()
        {
            echo '极光发送信息!';
        }
    }
    
    class MessageContext
    {
        private $message;
        public function __construct(Message $msg)
        {
            $this->message = $msg;
        }
        public function SendMessage()
        {
            $this->message->send();
        }
    }
    
    $bdMsg = new BaiduYunMessage();
    $msgCtx = new MessageContext($bdMsg);
    $msgCtx->SendMessage();
    
    $alMsg = new AliYunMessage();
    $msgCtx = new MessageContext($alMsg);
    $msgCtx->SendMessage();
    
    $jgMsg = new JiguangMessage();
    $msgCtx = new MessageContext($jgMsg);
    $msgCtx->SendMessage();

    说明

    原文地址:https://juejin.cn/post/6844903955860996110

    作者:硬核项目经理

    推荐学习:《PHP视频教程

    以上就是一起聊聊PHP中的策略模式的详细内容,更多请关注php中文网其它相关文章!

    声明:本文转载于:掘金社区,如有侵犯,请联系admin@php.cn删除
    上一篇:PHP中什么是静态?深入了解静态属性和静态方法 下一篇:详解PHP中高精度计时器HRTime扩展
    VIP会员

    相关文章推荐

    • PHP如何判断是否为平衡二叉树• PHP如何计算数据流中的第K大的元素• phpmyadmin如何解决控制用户连接失败问题• php获取文件后缀名的三种方法是什么• 浅谈PHP中var_export()函数的使用方法• 深入浅析PHP中实现SSO单点登录的方法

    全部评论我要评论

  • 取消发布评论发送
  • 1/1

    PHP中文网