策略模式就是用来封装算法的,但在实践中,我们发现可以用它来封装几乎任何类型的规则,只要在分析过程中听到需要在不同时间应用不同的业务规则,就可以考虑使用策略模式处理这种变化的可能性。
超市促销活动,分别有原价,八折,满300减50,使用策略模式……,程序如何设计。
<?php
/**
* 抽象活动算法类
*/
namespace strategy;
abstract class StrategyAbstract
{
/**
* 具体活动算法方法
* @return mixed
*/
public abstract function doAction($mo2. 具体算法产品类ney);
}
<?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 .'元';
}
}
<?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://php.daiying.net.cn
最新评论