1、策略模式:定义了算法族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化独立于使用算法的客户。
2、例子类图概览:
3、假设我们需要实现一款鸭子游戏,鸭子们在河里一遍游泳戏水,一遍呱呱叫。鸭子的种类很多,实际生活中的鸭子、模型鸭、火箭鸭等等,有些鸭子会飞会叫,有些鸭子既不会飞也不会叫。这时候如果我们光用类的继承来实现,就是导致部分不会飞的鸭子也拥有了会飞的方法,这种bug,我们可以通过类与接口组合模式实现。当我们想要在程序运行过程中动态修改鸭子的行为,这时候就可以使用策略模式实现,具体实现代码如下:
1)首先我们需要一个鸭子抽象基类:Duck.php
<?php
/**
* 鸭子基础类
* Class Duck
*/
abstract class Duck{
public $flyBehavior; //飞行行为接口实现对象
public $quackBehavior; //呱呱叫行为接口实现对象
/**
* 让鸭子飞
*/
public function performFly(){
$this->flyBehavior->fly();
}
/**
* 让鸭子叫
*/
public func