策略模式:
策略模式定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换。策略模式让算法独立于使用它的客户而独立变化;
适用场景:
1、多个类只区别在于表现行为不同,可以使用strategy(策略)模式,在操作时动态选择具体要执行的行为(算法、策略);
2、需要在不同情况下使用不同的策略(算法),或者策略还可能在未来用其它方式来实现;
3、对客户隐藏具体策略(算法)的实现细节,彼此完全独立;
模式分析:
策略模式与工厂模式均是扩展性好,策略模式主要解决的问题(适用场景):有多种策略可以选择,根据不同的情况选择不同的策略(算法),可以随意的增加策略,而不用去修改使用策略的中间模块。例如:工资计算,各层次计算工资公式(算法)不同,财务部门根据不同层次员工选择不同的计算公式;
代码实现:
<?php
/1**
* 策略模式
*/
abstract class SalaryAbs {
abstract function calculate();
}
/1**
*
* 高工资策略(算法1)
* @author Administrator
*
*/
class HighSalary extends SalaryAbs {
public function calculate(){
echo ‘HighSalary!<br>’;
}
}
/1**
*
* 低工资策略(算法2)
* @author Administrator
*
*/
class LowSalary extends SalaryAbs {
public function calculate(){
echo ‘LowSalary!<br>’;
}
}
/1**
*
* 主体操作类
* @author Administrator
*
*/
class Accountant {
//public function getResult($salaryStrategy){
static function getResult($salaryStrategy){
$salary = new $salaryStrategy;
$salary->calculate();
}
}
Accountant::getResult(‘HighSalary’);
Accountant::getResult(‘LowSalary’);