策略模式又称为政策模式,属于行为型设计模式<br />定义一系列的算法,把他们一个个封装起来,并且使他们相互替换,本模式使得算法可独立于使用他的客户而改变<br />策略模式跟简单工厂很类似,看着都差不多,<br />工厂模式属于创造型模式,用来创造对象,返回的是new出来的对象那个,需要调用什么方法,由客户端决定<br />策略模式属于行为型模式,通过执行上下文,将调用的函数封装在一起,客户端只需要执行上下文的方法就行<br />简单理解,工厂返回对象,自己想怎么用怎么用,策略执行固定的方法,<br />![image.png](https://cdn.nlark.com/yuque/0/2021/png/22438777/1635839540049-8c60c7e3-19e3-4153-af12-2285f7feeb86.png#clientId=u5f0ac143-7c26-4&from=paste&height=298&id=u2456209a&margin=%5Bobject%20Object%5D&name=image.png&originHeight=298&originWidth=762&originalType=binary&ratio=1&size=39090&status=done&style=none&taskId=u7d7acbeb-299e-47de-9d9d-7d579ae4b96&width=762)
interface Message
{
public function send();
}
class BaiduYunMessage implements Message
{
function send()
{
echo '百度云发送信息!';
}
}
class AliYunMessage implements Message
{
public function send()
{
echo '阿里云发送信息!';
}
}
class JiguangMessage implements Message
{
public function send()
{
echo '极光发送信息!';
}
}
class MessageContext
{
private $message;
public function __construct(Message $msg)
{
$this->message = $msg;
}
public function SendMessage()
{
//执行定义好的函数
$this->message->send();
}
}
$bdMsg = new BaiduYunMessage();
$msgCtx = new MessageContext($bdMsg);
$msgCtx->SendMessage();
$alMsg = new AliYunMessage();
$msgCtx = new MessageContext($alMsg);
$msgCtx->SendMessage();
$jgMsg = new JiguangMessage();
$msgCtx = new MessageContext($jgMsg);
$msgCtx->SendMessage();