zoukankan      html  css  js  c++  java
  • php 策略模式

    策略模式定义了算法家族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化,不会影响到使用算法的客户,(策略模式将完成相同的功能的方法分别封装不同的类中,然后在一个类中封装这些不同的类)

    interface CashSuper
    {
    public function acceptCash($money);#都是付钱业务

    }
    class CashNormal implements  CashSuper
    {
    public function acceptCash($money)
    {

    return $money;#原价
    }

    }
    class CashRebate implements  CashSuper
    {
    private $moneyRebate ;

    public function __construct($moneyRebate)
    {
    $this->moneyRebate = $moneyRebate;
    }

    public function acceptCash($money)
    {

    return $money * $this->moneyRebate;#打折


    }

    }

    class CashReturn implements  CashSuper
    {
    private $moneyCondition ;
    private $moneyReturn;

    public function __construct($moneyCondition,$moneyReturn)
    {

    $this->moneyCondition = $moneyCondition;
    $this->moneyReturn = $moneyReturn;

    }

    public function acceptCash($money)
    {
    if ($money >= $this->moneyCondition){

    $money = $money - ($money / $this->moneyCondition) * $this->moneyReturn;#返券
    }

    return $money;

    }

    }

    class CashContext
    {

    private $cs;

    public function __construct($cs)
    {
    $this->cs = $cs ;
    }


    public function getResult($money){

    return $this->cs->acceptCash($money);
    }



    }

    $cc = new CashContext(new CashNormal());
    $cc = new CashContext(new CashRebate(0.5));
    $cc = new CashContext(new CashReturn(300,100));
    $result = $cc->getResult(400);

    echo $result;

    策略模式的优点
    策略模式是一种定义一系列算法的方法,从概念上来看,所有这些算法完成的都是相同的工作,只是实现不同,它可以以相同的方式调用所有的算法,减少了各种算法类与使用算法类之间的耦合
    策略模式的Strategy类层次为Context定义了一系列的可供重用的算法或行为。继承有助于析取出这些算法中的公共功能
    策略模式简化了单元测试,因为每个算法都有自己的类,可以通过自己的接口单独测试,当一个算法的修改不会影响其他的算法

    策略模式就是用来封装算法的,但在实践中,我们发现可以用它来封装几乎任何类型的规则,只要在分析过程中听到需要在不同时间应用不同的业务规则,就可以考虑使用策略模式处理
  • 相关阅读:
    linux & xp 双系统 重装的问题
    判断推理类试题的复言命题考点与题型总结
    Oracle、MySQL、SQL Server数据库的数据类型的差异
    java环境变量设置和问题及解决方法
    如何正确卸载MySQL,主要是删除注册表中的垃圾信息
    J2EE经典面试题及答案
    正则表达式
    囚犯的两难处境
    MySQL 数值数据类型
    linux学习之SHELL脚本
  • 原文地址:https://www.cnblogs.com/paulversion/p/8422252.html
Copyright © 2011-2022 走看看