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和设计模式,以上是今天早上所学,不足之处,请多多指教 也欢迎互相交流

  • 相关阅读:
    hdu1828线段树(两次扫描+离散化)
    hdu1542线段树(扫描线+离散化)
    二分思想
    hdu2871线段树区间更新
    git初体验
    python笔记-模块
    python笔记-动态类型
    AWS上创建EKS(K8S)集群
    Akamai CDN刷新(通过Akamai cli 自动刷新)
    创建Akamai cdn api授权
  • 原文地址:https://www.cnblogs.com/224yang/p/7245120.html
Copyright © 2011-2022 走看看