美文网首页设计模式
设计模式 策略模式

设计模式 策略模式

作者: Yohann丶blog | 来源:发表于2020-06-22 16:15 被阅读0次
    WechatIMG13.jpeg

    介绍

    shiyanlou:策略模式(Strategy Pattern):定义一系列算法,将每一个算法封装起来,并让它们可以相互替换。策略模式让算法独立于使用它的客户而变化,也称为政策模式(Policy)。

    角色

    角色 说明
    Context 环境类,使用一个 ConcreteStrategy 对象来配置;维护一个对 Stategy 对象的引用,同时,可以定义一个接口来让 Stategy 访问它的数据
    Strategy 抽象策略类,定义所有支持的算法的公共接口。Context 使用这个接口来调用某 ConcreteStrategy 定义的算法
    ConcreteStrategy 具体策略类,实现 Strategy 接口的具体算法

    角色示例

    类名 担任角色 说明
    Order Context 订单类
    PayMethod Strategy 支付方式类
    BankCard ConcreteStrategy 银行卡支付类
    Huabei ConcreteStrategy 花呗支付类
    YuEBao ConcreteStrategy 余额宝支付类

    UML类图

    WechatIMG12.jpeg

    代码

    <?php 
    abstract class PayMethod
    {
        abstract function pay();
    }
    
    class BankCard extends PayMethod
    {
        public function pay()
        {
            return "更换银行卡支付".PHP_EOL;
        }
    }
    
    class Huabei extends PayMethod
    {
        public function pay()
        {
            return "更换花呗支付".PHP_EOL;
        }
    }
    
    class YuEBao extends PayMethod
    {
        public function pay()
        {
            return "更换余额宝支付".PHP_EOL;
        }
    }
    
    class Order
    {
        protected $payMethod;
    
        public function setPayMethod(PayMethod $payMethod)
        {
            $this->payMethod = $payMethod;
        }
    
        public function pay()
        {
            return $this->payMethod->pay();
        }
    }
    
    $order = new Order();
    $bankCard = new BankCard();
    $yuEBao = new yuEBao();
    $huabei = new Huabei();
    $order->setPayMethod($bankCard);
    echo $order->pay();
    $order->setPayMethod($yuEBao);
    echo $order->pay();
    $order->setPayMethod($huabei);
    echo $order->pay();
    

    创建 Pay.php,内容如上。

    执行

    $ php Pay.php
    更换银行卡支付
    更换余额宝支付
    更换花呗支付
    

    相关文章

      网友评论

        本文标题:设计模式 策略模式

        本文链接:https://www.haomeiwen.com/subject/rltffktx.html