策略模式(PHP)

策略模式的PHP示例代码,便于快速理解该设计模式。

  1. 创建 策略模型。
//策略抽象类
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);
    }
}
  1. 实例化调用。
// 满减折算
$mode1 = new StrategyFind(new ManJianStrategy());
$mode1->get(100);


// 满减活动
$mode2= new StrategyFind(new DaZheStrategy());
$mode2->get(100);
  1. 结果
PS C:\Users\Administrator\Desktop> php test.php
这是满减活动详情
满减算法:原价100元
这是打折活动详情
打折算法:原价100

总结

  简单一句话来说就是:把if else不同的业务封装成一个个策略类,保证了代码的可读性,可维护性和可扩展性。

参考: https://www.cnblogs.com/houdabao/p/9546871.html

猜你喜欢

转载自blog.csdn.net/qq_36453564/article/details/107477379