zoukankan      html  css  js  c++  java
  • 策略模式

    策略模式:定义了算法族,分别封装起来,让他们之间可以相互替换,此模式让算法的变化独立于使用算法的客户

    1.找出代码中可能变化之处,把他们独立出来,不要和那些不变化的代码混在一起

    2.针对借口编程,而不是针对实现编程

    3.多用组合少用继承

    namespace DesignPatternStrategyPattern;
    
    //定义行为借口
    Interface FlyBehavior { public function fly(); } Interface QuakeBehavior { public function Quake(); }
    //定义鸭子抽象类
    abstract class Duck { protected $fly; protected $quake; public function __construct(FlyBehavior $fly, QuakeBehavior $quake) { $this -> fly = $fly; $this -> quake = $quake; } public function fly() { $this -> fly -> fly(); } public function quake() { $this -> quake -> quake(); } public function setFlyBehavior(FlyBehavior $fly) { $this -> fly = $fly; } public function setQuakeBehavior(QuakeBehavior $quake) { $this -> quake = $quake; } }

    具体实现的分离

    class HomeDock extends Duck
        {
            public function cooked()
            {
                echo "home duck be cooked
    ";
            }
        }
    
        class WildDuck extends Duck
        {
            public function hunter()
            {
                echo "wild duck is hunting
    ";
            }
        }
    
        class FlyPeace implements FlyBehavior
        {
            public function fly()
            {
                echo "fly peace
    ";
            }
        }
    
        class FlyRocket implements FlyBehavior
        {
            public function fly()
            {
                echo "fly like rocket
    ";
            }
        }
    
        class BoomQuake implements QuakeBehavior
        {
            public function quake()
            {
                echo "quake like a boom
    ";
            }
        }
    
        $homedock = new HomeDock(new FlyRocket, new BoomQuake);
        $homedock -> cooked();
        $homedock -> quake();
        $homedock -> fly();
        $homedock -> setFlyBehavior(new FlyPeace);
        $homedock -> fly();

    输出

    home duck be cooked
    quake like a boom
    fly like rocket
    fly peace
  • 相关阅读:
    (数学)Knight's Trip -- hdu -- 3766
    (DP 雷格码)Gray code -- hdu -- 5375
    (简单匹配)Card Game Cheater -- hdu --1528
    (数论)LightOJ -- 1245
    (树状数组+离散化)lines--hdu --5124
    01项目需要用到的jquery函数介绍
    jdbc基础
    基础加强
    jdbc
    01-1项目所需小工具
  • 原文地址:https://www.cnblogs.com/yangxunwu1992/p/5548249.html
Copyright © 2011-2022 走看看