策略模式的PHP示例代码,便于快速理解该设计模式。
- 创建
策略
模型。
//策略抽象类
abstract class StrategyAbstract
{
/**
* 活动详情方法
* @return mixed
*/
public abstract function details();
/**
* 具体活动算法方法
* @return mixed
*/
public abstract function doAction($money);
}
//满减策略类
class ManJianStrategy extends StrategyAbstract
{
public function details(){
echo "这是满减活动详情\n";
}
public function doAction($money)
{
echo "满减算法:原价{$money}元\n";
}
}
//打折策略类
class DaZheStrategy extends StrategyAbstract
{
public function details(){
echo "这是打折活动详情\n";
}
public function doAction($money)
{
echo "打折算法:原价{$money}元\n";
}
}
2.创建 上下文
模型。
//上下文
class StrategyFind
{
private $strategy_mode;
/**
* 初始时,传入具体的策略对象
* @param $mode
*/
public function __construct($mode)
{
$this->strategy_mode = $mode;
}
/**
* 执行打折算法
* @param $money
*/
public function get($money)
{
$this->strategy_mode->details();
$this->strategy_mode->doAction($money);
}
}
- 实例化调用。
// 满减折算
$mode1 = new StrategyFind(new ManJianStrategy());
$mode1->get(100);
// 满减活动
$mode2= new StrategyFind(new DaZheStrategy());
$mode2->get(100);
- 结果
PS C:\Users\Administrator\Desktop> php test.php
这是满减活动详情
满减算法:原价100元
这是打折活动详情
打折算法:原价100元
总结
简单一句话来说就是:把if else不同的业务封装成一个个策略类,保证了代码的可读性,可维护性和可扩展性。