Strategy 策略模式,也称为政策模式(Policy),定义一系列算法,将每一个算法封装起来,并让它们可以相互替换

策略模式让算法独立于使用它的客户而变化,使他们之间能互相快速切换

先定义一个抽象策略,并且新增 2 个具体实现:

Strategy.php
1
2
3
4
abstract class Strategy
{
abstract function peddle();
}
LadyStrategy.php 女性用户策略
1
2
3
4
5
6
7
class LadyStrategy extends Strategy
{
public function peddle()
{
echo '看看这款Dior豆沙色哑光口红,不行还有YSL、MAC等' . PHP_EOL;
}
}
GentlemanStrategy.php 男性用户策略
1
2
3
4
5
6
7
class GentlemanStrategy extends Strategy
{
public function peddle()
{
echo '来看看这款刮胡刀,三环弧面,全身水洗' . PHP_EOL;
}
}

下面是需要传入策略的宣传语:

Slogan.php 标语
1
2
3
4
5
6
7
8
9
10
11
12
13
14
class Slogan
{
protected $strategy;

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

public function request()
{
$this->strategy->peddle($this);
}
}

最后是实际使用,根据不同策略输出合适宣传语:

1
2
3
4
5
$ladySlogan = new Slogan(new LadyStrategy);
$ladySlogan->request();

$gentlemanSlogan = new Slogan(new GentlemanStrategy);
$gentlemanSlogan->request();