工厂模式:着眼于得到对象,并操作对象。
策略模式:着重得到对象某方法的运行结果。
**概述:
策略模式属于对象的行为模式。其用意是针对一组算法,将每个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替换。策略模式使得算法可以在不影响到客户端的情况下发生变化**
UML图
![在这里插入图片描述](https:
**策略模式中主要角色
这个模式设计到三个角色:
环境角色(Context):持有一个Strategy的引用
抽象策略(Strategy)角色:这是一个抽象角色,通常由一个接口或抽象类实现。此角色给出所有的具体的策略类所需的接口
具体策略(ConcreateStrategy)角色:包装了相关的算法或行为**
```php
interface MathOp{
public function calculation($num1,$num2);
}
class MathAdd implements MathOp{
public function calculation($num1,$num2){
return $num1 + $num2;
}
}
class MathSub implements MathOp{
public function calculation($num1,$num2){
return $num1 - $num2;
}
}
class MathMulti implements MathOp{
public function calculation($num1,$num2){
return $num1 * $num2;
}
}
class MathDiv implements MathOp{
public function calculation($num1,$num2){
return $num1 / $num2;
}
}
class Op{
protected $op_class = null;
public function __construct($op_type){
$this->op_class = 'Math' . $op_type;
}
public function get_result($num1,$num2){
$cls = new $this->op_class;
return $cls->calculation($num1,$num2);
}
}
$obj = new Op('Add');
echo $obj->get_result(6,2);
$obj = new Op('Sub');
echo $obj->get_result(6,5);
$obj = new Op('Multi');
echo $obj->get_result(6,2);
$obj = new Op('Div');
echo $obj->get_result(6,2);