• 策略模式


    策略模式:定义了算法族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化独立于使用算法的客户。
    封装:把行为用接口封装起来,我们可以把那些经常变化的部分,从当前的类中单独取出来,用接口进行单独的封装。
    互相替换:我们封装好了接口,通过指定不同的接口实现类进行算法的变化。
    下面的代码是实现一个鸭子游戏,1)想让鸭子有不同的飞行功能,2)让它在运行时候做不同的飞行动作。
    <?php
    interface FlyBehavior{
        public function fly();
    }
     
    class FlyWithWings implements FlyBehavior{
        public function fly(){
            echo "Fly With Wings 
    ";
        }
    }
     
    class FlyWithNo implements FlyBehavior{
        public function fly(){
            echo "Fly With No Wings 
    ";
        }
    }
    class Duck{
        private $_flyBehavior;
        public function performFly(){
            $this->_flyBehavior->fly();
        }
     
        public function setFlyBehavior(FlyBehavior $behavior){
            $this->_flyBehavior = $behavior;
        }
    }
     
    class RubberDuck extends Duck{
    }
    // Test Case
    $duck = new RubberDuck();
     
    /*  想让鸭子用翅膀飞行 */
    $duck->setFlyBehavior(new FlyWithWings());
    $duck->performFly();            
     
    /*  想让鸭子不用翅膀飞行 */
    $duck->setFlyBehavior(new FlyWithNo());
    $duck->performFly();
    总的来说,我们在开发中的设计原则如下:
    1.找出应用中可能需要变化之处,把它们独立出来,不要和那些不需要变化的代码混在一起;
    2.针对接口编程,不针对实现编程;
    3.多用组合,少用继承;
  • 相关阅读:
    cordova封装h5为app,cookie不可用解决方法
    Cordova环境搭建
    HelloWorld
    《机器学习实战》-朴素贝叶斯
    《机器学习实战》-决策树
    《机器学习实战》-k近邻算法
    《机器学习实战》-机器学习基础
    单输出感知机及其梯度
    损失函数及其梯度
    激活函数及其梯度
  • 原文地址:https://www.cnblogs.com/mingaixin/p/4335607.html
Copyright © 2020-2023  润新知