• 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

    
    
  • 相关阅读:
    第一张图:每天初始化交易流程图
    Django部署服务时候报错:SQLite 3.8.3 or later is required (found 3.7.17)
    LOJ2494. 「AHOI / HNOI2018」寻宝游戏
    luoguP4429 [BJOI2018]染色
    LOJ2720. 「NOI2018」你的名字
    LOJ2262. 「CTSC2017」网络
    LOJ2398. 「JOISC 2017 Day 3」自然公园
    ULR1 B. 【ULR #1】光伏元件
    CF Good Bye 2020 题解&总结 A~G
    vue 导入.md文件(markdown转HTML)
  • 原文地址:https://www.cnblogs.com/zhangzhijian/p/14598950.html
Copyright © 2020-2023  润新知