适用性
策略依照使用而定
代码示例
/**
* 观察者接口
*/
interface StrategyInterface
{
/**
* 行为
* @return void
*/
public function doSomething();
}
/**
* 观察者实体类示例1
*/
class StrategyExampleOne implements StrategyInterface
{
/**
* 行为
* @return mixed
*/
public function doSomething()
{
echo "你选择了策略1 \n";
}
}
/**
* 观察者实体类示例2
*/
class StrategyExampleTwo implements StrategyInterface
{
/**
* 行为
* @return mixed
*/
public function doSomething()
{
echo "你选择了策略2 \n";
}
}
/**
* 实体类
*
* 依赖外部不同策略的实体类
*/
class Substance
{
/**
* 策略实例
* @var object
*/
private $_strategy;
/**
* 构造函数
* 初始化策略
*
* @param Strategy $strategy 策略实例
*/
public function __construct(StrategyInterface $strategy)
{
$this->_strategy = $strategy;
}
/**
* 模拟一个操作
*
* @return mixed
*/
public function someOperation()
{
$this->_strategy->doSomething();
}
}
// 使用策略1
$substanceOne = new Substance(new StrategyExampleOne);
$substanceOne->someOperation();
// 使用策略2
$substanceTwo = new Substance(new StrategyExampleTwo);
$substanceTwo->someOperation();
网友评论