1. 策略模式又称为政策模式,属于行为型设计模式<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)
    1. interface Message
    2. {
    3. public function send();
    4. }
    5. class BaiduYunMessage implements Message
    6. {
    7. function send()
    8. {
    9. echo '百度云发送信息!';
    10. }
    11. }
    12. class AliYunMessage implements Message
    13. {
    14. public function send()
    15. {
    16. echo '阿里云发送信息!';
    17. }
    18. }
    19. class JiguangMessage implements Message
    20. {
    21. public function send()
    22. {
    23. echo '极光发送信息!';
    24. }
    25. }
    26. class MessageContext
    27. {
    28. private $message;
    29. public function __construct(Message $msg)
    30. {
    31. $this->message = $msg;
    32. }
    33. public function SendMessage()
    34. {
    35. //执行定义好的函数
    36. $this->message->send();
    37. }
    38. }
    39. $bdMsg = new BaiduYunMessage();
    40. $msgCtx = new MessageContext($bdMsg);
    41. $msgCtx->SendMessage();
    42. $alMsg = new AliYunMessage();
    43. $msgCtx = new MessageContext($alMsg);
    44. $msgCtx->SendMessage();
    45. $jgMsg = new JiguangMessage();
    46. $msgCtx = new MessageContext($jgMsg);
    47. $msgCtx->SendMessage();