PHP设计模式-策略器模式(个人理解:像一个功能,有M种算法,根据自己的需要去选择相应的算法,适配器模式是把多种统一成一种类调用,而策略模式是把一种分解为多种类调用)

策略模式定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换。策略模式让算法独立于使用它的客户而独立变化,即封装变化的算法。

       个人理解:像一个功能,有M种算法,根据自己的需要去选择相应的算法,适配器模式是把多种统一成一种类调用,而策略模式是把一种分解为多种类调用


       适用场景:

       1、 多个类只区别在表现行为不同,可以使用Strategy模式,在运行时动态选择具体要执行的行为。

       2、 需要在不同情况下使用不同的策略(算法),或者策略还可能在未来用其它方式来实现。

       3、 对客户隐藏具体策略(算法)的实现细节,彼此完全独立。

       4、客户端必须知道所有的策略类,并自行决定使用哪一个策略类,策略模式只适用于客户端知道所有的算法或行为的情况。

       5、 策略模式造成很多的策略类,每个具体策略类都会产生一个新类。

 

例子:

//实现一个简单的计算器 (策略接口类)
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);   //8
 
$obj = new Op('Sub');
echo $obj->get_result(6,5);   //1
 
$obj = new Op('Multi');
echo $obj->get_result(6,2);   //12
 
$obj = new Op('Div');
echo $obj->get_result(6,2);   //3


 

原文链接:https://blog.csdn.net/jhq0113/article/details/45771863


posted @ 2021-03-30 21:26  张志健  阅读(105)  评论(0编辑  收藏  举报