注册 登录  
 加关注
查看详情
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

Copper peas ' Bolg

Keep On Moving...This Is My Life...

 
 
 

日志

 
 

【原】 PHP 设计模式三之策略设计模式  

2011-06-01 16:44:13|  分类: php |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

<?php
header("Content-type: text/html; charset=utf-8");
/**
 * 商城促销活动 策略设计模式
 * 促销活动暂定为 1:100--200返利10% 2:200以上返利20%
 * [
 *    以前案例中的设计模式一之工厂模式计算器也可以组合使用策略模式,选择不同的计算本身就是不同的策略
 *    Template模式:模板方法模式与策略模式的不同在于,策略模式使用委派的方法提供不同的算法行为,而模板方法使用继承的方法提供不同的算法行为,
 *    Template模式   特点重在规范,约束流程。
 * ]
 * 定义:根据需求的不同,替换不同的策略对象(逻辑运算等一般在类内部)应对
 * @author Chen Wei Han <csq-3@163.com>
 * @copyright Chen Wei Han 2011.06.01
 * @link http://csq-3.blog.163.com
 * @package demo
 * @version $Id: strategy.php 1 2011-06-01
 */

/**
 * 促销活动抽象类
 *
 * @author Chen Wei Han <csq-3@163.com>
 * @package demo
 */
abstract class abstract_Salespromotion
{  
    protected $value;
      
 public function __construct($value)
 {
  $this->value = $value;
 }
 
 abstract public function GetResult();
}

/**
 * 促销活动返利10%子类
 *
 * @author Chen Wei Han <csq-3@163.com>
 * @package demo
 */
class StrategyRebateA extends abstract_Salespromotion
{
   
 public function __construct($value)
 {
  parent::__construct($value);
 }
 
 public function GetResult()
 {
  return $this->value*9/10;
 }

}

/**
 * 促销活动返利20%子类
 *
 * @author Chen Wei Han <csq-3@163.com>
 * @package demo
 */
class StrategyRebateB extends abstract_Salespromotion
{
    public function __construct($value)
 {
  parent::__construct($value);
 }
 
 public function GetResult()
 {
  return $this->value*4/5;
 }

}

/**
 * 无促销活动正常返回
 *
 * @author Chen Wei Han <csq-3@163.com>
 * @package demo
 */
class StrategyRebateC extends abstract_Salespromotion
{
    public function __construct($value)
 {
  parent::__construct($value);
 }
 
 public function GetResult()
 {
  return $this->value;
 }

}

/**
 * 调用策略类
 *
 * @author Chen Wei Han <csq-3@163.com>
 * @package demo
 */

class UseStrategy
{
 /**
  * 定义策略变量
  *
  * @var $result
  */
 private $_strategy;
 
 /**
  * 构造函数
  *
  * @param $value
  */
    public function __construct($strategy)
    {
     $this->_strategy = $strategy;
     
    }

    /**
     * 使用策略对象
     *
     */
    public function Strategy() {
 
     return $this->_strategy->GetResult();
    }
}

/**
 * 判断策略类
 *
 * @author Chen Wei Han <csq-3@163.com>
 * @package demo
 */
class GetStrategy
{
 
 private $result;
 private $type;
 
 public function BackResult($value)
 {
        if($value>=100 && $value<=200) 
        {
         $this->type="A";
        }
        else if($value>200)
        {
         $this->type="B";
        }
        else
        {
         $this->type="C";
        }     
        $ClassName    =  "StrategyRebate".$this->type;
        $UseStrategy  =  new UseStrategy(new $ClassName($value));     
        $this->result =  $UseStrategy -> Strategy();       
        return $this->result;   
 } 
}


//假设用户A购买了100元 用户B购买了200元
$UserA=150;
$UserB=250;

$getstrategy = new GetStrategy;
echo $getstrategy->BackResult($UserA);
echo $getstrategy->BackResult($UserB);

  评论这张
 
阅读(84)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018