zoukankan      html  css  js  c++  java
  • PHP设计模式-策略模式

    策略模式就是用来封装算法的,但在实践中,我们发现可以用它来封装几乎任何类型的规则,只要在分析过程中听到需要在不同时间应用不同的业务规则,就可以考虑使用策略模式处理这种变化的可能性。

     超市促销活动,分别有原价,八折,满300减50,使用策略模式……,程序如何设计。
           
     
        流程图如下:
          
              
     
    1. 抽象活动算法类
    <?php
    /**
     * 抽象活动算法类
     */
    namespace strategy;
    
    abstract class StrategyAbstract
    {
        /**
         * 具体活动算法方法
         * @return mixed
         */
        public abstract function doAction($money);
    }

    2. 具体算法产品类

    <?php
    /**
     * 满减算法产品类
     */
    namespace strategy;
    
    class ManJianStrategy extends StrategyAbstract
    {
        public function doAction($money)
        {
            echo '满减算法:原价'. $money .'';
        }
    }
    <?php
    /**
     * 打折算法产品类
     */
    namespace strategy;
    
    class DaZheStrategy extends StrategyAbstract
    {
        /**
         * 具体算法实现
         * @param $money
         * @return mixed|void
         */
        public function doAction($money)
        {
            echo '打折算法:原价'. $money .'';
        }
    }

    3. 策略工厂类

    <?php
    /**
     * 策略工厂类
     */
    namespace strategy;
    
    class StrategyFind
    {
        private $strategy_mode;
    
        /**
         * 初始时,传入具体的策略对象
         * @param $mode
         */
        public function __construct($mode)
        {
            $this->strategy_mode = $mode;
        }
    
        /**
         * 执行打折算法
         * @param $money
         */
        public function get($money)
        {
            $this->strategy_mode->doAction($money);
        }
    }

    入口文件

    <?php
    
    namespace strategy;
    
    include '../autoload.php';
    // 满减折算
    $mode1 = new StrategyFind(new ManJianStrategy());
    $mode1->get(100);
    
    echo '<br>';
    
    // 满减活动
    $mode2= new StrategyFind(new DaZheStrategy());
    $mode2->get(100);

    原文:https://www.cnblogs.com/houdabao/p/9546871.html

  • 相关阅读:
    MySQL 函数
    ARC072_F Dam
    1373D
    科目二和科目三找准30厘米位置的点位
    MySQL 数字保留两位小数
    IntelliJ IDEA 中,项目文件右键菜单没有svn选项解决办法
    MySQL SQL语句书写顺序和执行顺序
    科目三道路驾驶技能考试之百米加减挡操作
    上海科目三道路驾驶技能考试夜间灯光模拟操作
    上海 科目三大路考试攻略
  • 原文地址:https://www.cnblogs.com/zhangzhijian/p/12305820.html
Copyright © 2011-2022 走看看