zoukankan      html  css  js  c++  java
  • 【策略模式】不同的时间用不同的规则优先考虑策略模式

    记录策略模式,与简单工厂模式相互结合,降低代码之间的耦合

    案列:超市收银软件系统,需求:满减,打折。。。各种优惠活动

    5个类

    1. CountP
    2. Count
    3. Rabate
    4. Ret
    5. Cash
    /**
    * 父类
    */
    abstract
    class CountP { abstract public function getCash($money); }
    /**
     * Class Count
     * @package Home\Driver\Sum
     * 正常计算类
     */
    class Count extends CountP {
        public function getCash($money)
        {
            return $money;
        }
    }
    /**
     * Class Rabate
     * @package Home\Driver\Sum
     * 打折计算类
     */
    class Rabate extends CountP {
        public $d = 1;
    
        public function __construct($dis)
        {
            $this->d = $dis;
        }
    
        public function getCash($money)
        {
            return $money * $this->d;
        }
    }
    /**
     * Class Ret
     * @package Home\Driver\Sum
     * 满减计算类
     */
    class Ret extends CountP {
        public $moneyCondition = 0;
        public $moneyReturn = 0;
    
        public function __construct($moneyCondition,$moneyReturn)
        {
            $this->moneyCondition = $moneyCondition;
            $this->moneyReturn = $moneyReturn;
        }
    
        public function getCash($money)
        {
            if($money>=$this->moneyCondition){
                $money = $money-floor($money/$this->moneyCondition)*$this->moneyReturn;
            }
            return $money;
        }
    }
    /**
     * Class Cash
     * @package Home\Driver
     * 工厂类
     */
    class Cash{
        public $obj = null;
    
        public function __construct($type)
        {
            switch ($type){
                case '正常收费':
                    $this->obj = new Count();
                    break;
                case '8折':
                    $this->obj = new Rabate(0.8);
                    break;
                case '满300减100':
                    $this->obj = new Ret(300,100);
                    break;
                default:
                    throw_exception('类型错误');
                    break;
            }
        }
    
        public function getAcceptCash($money){
            return $this->obj->getCash($money);
        }
    }
    /**
     * Class SumController
     * @package Home\Controller
     * 客户端
     */
    class SumController extends Controller {
    
        public function index(){
            $countSum = new Cash('满300减100');
            $count = $countSum->getAcceptCash(400);
            echo $count;
        }
    }
  • 相关阅读:
    开发环境之git:团队协作git工作流与常用命令
    js基础梳理-关于this常见指向问题的分析
    Idea 开发环境配置
    Mybatis-generator生成Service和Controller
    分享一个集成在项目中的REST APIs文档框架swagger
    mysql读写分离
    (转)tomcat进程意外退出的问题分析
    shell脚本切割tomcat的日志文件
    (转)Java 详解 JVM 工作原理和流程
    ThreadPoolExecutor-线程池开发的使用
  • 原文地址:https://www.cnblogs.com/huanhang/p/6037580.html
Copyright © 2011-2022 走看看