/*
策略模式:定义了算法族,分别封装起来,他们之间可以相互替换,此模式让算法的变化独立于使用算法的客户。
封装:把行为用接口封装起来,我们可以把那些经常变化的部分,从当前的类中取出来,用接口进行单独的封装。
互相替换:我们封装好了接口,通过指定不同的接口实现类进行算法的变化。
*/
/**
*接口:飞行
*@author li.yonghuan
*@version 2014.01.17
*/
interface FlyBehavior{
/**
*可以飞行
*
*/
public function fly();
}
/**
*用翅膀飞行
*@author li.yonghuan
*@version 2014.01.17
*/
class FlyWithWings implements FlyBehavior{
/**
*飞行方法
*
*/
public function fly(){
echo 'fly with wings';
}
}
/**
*不用翅膀飞行
*@author li.yonghuan
*@version 2014.01.17
*/
class FlyWithNo implements FlyBehavior{
/**
*飞行方法
*/
public function fly(){
echo 'fly with no';
}
}
/**
*鸭子类
*@author li.yonghuan
*@version 2014.01.17
*/
class Duck{
/**
*飞行实例
*@var FlyBehavior object
*/
private $_flyBehavior;
/**
*开始飞
*
*/
public function performFly(){
$this->_flyBehavior->fly();
}
/**
*设置飞行实例
*@param $behavior Flybehavior
*/
public function setFlyBehavior( FlyBehavior $behavior ){
$this->_flyBehavior = $behavior;
}
}
/**
*橡皮鸭
*@author li.yonghuan
*@version 2014.01.17
*/
class RubberDuck extends Duck{
}
//测试
$duck = new RubberDuck();
/* 橡皮鸭用翅膀飞行 */
$duck->setFlyBehavior(new FlyWithWings());
$duck->performFly();
/* 橡皮鸭不用翅膀飞行 */
$duck->setFlyBehavior( new FlyWithNo() );
$duck->performFly();
php 策略模式
最新推荐文章于 2024-07-17 12:52:39 发布