zoukankan      html  css  js  c++  java
  • php 设计模式之策略模式

    策略模式:定义算法,并将其封装起来,让它们之间可以互相替换,此模式让算法的变化独立于使用算法的客户。

    步骤:1、抽象策略角色:定义接口或抽象类

               2、具体策略角色:实现该接口(抽象类),即具体的算法实现

               3、环境角色:对具体方法的调用

    适用场景:1、多个类只是行为方式不用,在操作时动态的选择具体使用的方法(算法)

                      2、在不同的环境下使用算法,比if {}else{}更具有维护性和扩展性

    例子代码如下

    <?php
    //定义接口 interface FlyBehavior{ public function fly(); } //具体方法实现(例子中有不同的飞行方式) class FlyWithWings implements FlyBehavior{ public function fly(){ echo "Fly With Wings \n"; } } class FlyWithNo implements FlyBehavior{ public function fly(){ echo "Fly With No Wings \n"; } }
    //定义鸭子的超类 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();

    初学PHP和设计模式,以上是今天早上所学,不足之处,请多多指教 也欢迎互相交流

  • 相关阅读:
    ADC测试matlab代码
    matlab的滤波器仿真——低通滤波器与插值滤波器
    PDF转Image最终方案
    多线程和蕃茄炒蛋
    git学习总结
    踩坑了,当前目录问题
    Angular 1.x 升级到 Angular 2
    打造AngularJs2.0开发环境
    发布一个自用的ansi转utf8程序
    用itextsharp打印pdf示例
  • 原文地址:https://www.cnblogs.com/224yang/p/7245120.html
Copyright © 2011-2022 走看看