1.定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换。策略模式让算法独立于使用它的客户而独立变化
2.代码文件结构:
2.1 策略接口或策略抽象类
2.2 具体的策略类,继承了2.2中的类
2.3 接收具体策略对象的中间层类
3.具体代码:
策略接口:AdStrategy.php
interfere AdStrategy{
//可以约定好各种具体策略必须实现的统一方法
public function getAd();
}
具体策略类:AdOne.php
class AdOne implements AdStrategy{
public function getAd(){
echo "我是第一个具体的策略类AdOne";
}
}
中间层类:Ad.php
class Ad{
static private $_strategy;
static public function setStrategy( AdStrategy $obj ){
self::$_strategy = $obj;
}
//调用具体策略类的方法
public function __call( $func, $args ){
if( is_callable( array( self::$_strategy, $func ) ) ){
call_user_func_array( array( self::$_strategy, $func ), $args );
}
}
}
4.调用代码
$obj = new Ad();
$obj->setStrategy( new AdOne() );
$obj->getAd();