应用:
1. 多个类只区别在表现行为不同,在运行时动态选择具体要执行的行为。
2. 需要在不同情况下使用不同的策略,或者策略还可能在未来用其它方式来实现。
3. 对客户隐藏具体策略(算法)的实现细节,彼此完全独立。
优点:
1. 易于扩展。
2. 避免多重条件判断
3. 高内聚,低耦合
缺点: 需要维护类的数量庞大
<?php
interface Strategy {
function AlgorithmInterface();//默认就是abstract public所以不需要写
}
class ConcreteStrategyA implements Strategy {
public function AlgorithmInterface() {
echo 'algorithm A';
}
}
class ConcreteStrategyB implements Strategy {
public function AlgorithmInterface() {
echo 'algorithm B';
}
}
class ConcreteStrategyC implements Strategy {
public function AlgorithmInterface() {
echo 'algorithm C';
}
}
class Context {
protected $_strategy;
public function __construct($strategy) {
$this->_strategy = $strategy;
}
public function ContextInterface() {
$this->_strategy->AlgorithmInterface();
}
}
$context = new Context(new ConcreteStrategyA());
$context->ContextInterface();
$context = new Context(new ConcreteStrategyB());
$context->ContextInterface();
$context = new Context(new ConcreteStrategyC());
$context->ContextInterface();
?>