PHP设计模式之策略模式原理与用法实例分析


Posted in PHP onApril 04, 2019

本文实例讲述了PHP设计模式之策略模式原理与用法。分享给大家供大家参考,具体如下:

策略模式(Strategy Pattern)

策略模式是对象的行为模式,用意是对一组算法的封装。动态的选择需要的算法并使用。

策略模式指的是程序中涉及决策控制的一种模式。策略模式功能非常强大,因为这个设计模式本身的核心思想就是面向对象编程的多形性思想。

策略模式的三个角色:

1. 抽象策略角色

2. 具体策略角色

3. 环境角色(对抽象策略角色的引用)

实现步骤:

1. 定义抽象角色类(定义好各个实现的共同抽象方法)

2. 定义具体策略类(具体实现父类的共同方法)

3. 定义环境角色类(私有化申明抽象角色变量,重载构造方法,执行抽象方法)

策略模式的代码实例:

<?php
  abstract class baseAgent { //抽象策略类
    abstract function PrintPage();
  }
  //用于客户端是IE时调用的类(环境角色)
  class ieAgent extends baseAgent {
    function PrintPage() {
      return 'IE';
    }
  }
  //用于客户端不是IE时调用的类(环境角色)
  class otherAgent extends baseAgent {
    function PrintPage() {
      return 'not IE';
    }
  }
  class Browser { //具体策略角色
    public function call($object) {
      return $object->PrintPage ();
    }
  }
  $bro = new Browser ();
  echo $bro->call ( new ieAgent () );
?>

运行结果:

IE

就在编程领域之外,有许多例子是关于策略模式的。例如:

如果我需要在早晨从家里出发去上班,我可以有几个策略考虑:我可以乘坐地铁,乘坐公交车,走路或其它的途径。每个策略可以得到相同的结果,但是使用了不同的资源。

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
如何使用脚本模仿登陆过程
Nov 22 PHP
php cookie 作用范围?不要在当前页面使用你的cookie
Mar 24 PHP
PHP自动选择 连接本地还是远程数据库
Dec 02 PHP
php异常:Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE  eval()'d code error
May 19 PHP
PHP中使用strpos函数实现屏蔽敏感关键字功能
Aug 21 PHP
php session的锁和并发
Jan 22 PHP
抛弃 PHP 代价太高
Apr 26 PHP
CI框架整合smarty步骤详解
May 19 PHP
解决微信授权回调页面域名只能设置一个的问题
Dec 11 PHP
PHP 实现浏览记录并按日期分组
May 11 PHP
PHP快速排序算法实现的原理及代码详解
Apr 03 PHP
在Laravel5中正确设置文件权限的方法
May 22 PHP
Laravel路由研究之domain解决多域名问题的方法示例
Apr 04 #PHP
PHP设计模式之观察者模式定义与用法分析
Apr 04 #PHP
PHP示例演示发送邮件给某个邮箱
Apr 03 #PHP
PHP whois查询类定义与用法示例
Apr 03 #PHP
ThinkPHP3.2.3框架实现的空模块、空控制器、空操作,跳转到错误404页面图文详解
Apr 03 #PHP
PHP反射实际应用示例
Apr 03 #PHP
ThinkPHP3.2.3框架实现执行原生SQL语句的方法示例
Apr 03 #PHP
You might like
基于mysql的论坛(2)
2006/10/09 PHP
用PHPdig打造属于你自己的Google[图文教程]
2007/02/14 PHP
PHP 魔术函数使用说明
2010/05/14 PHP
php+mysqli使用面向对象方式查询数据库实例
2015/01/29 PHP
PHP操作MySQL的mysql_fetch_* 函数的常见用法教程
2015/12/25 PHP
PHP设计模式之抽象工厂模式实例分析
2019/03/25 PHP
javascrpt绑定事件之匿名函数无法解除绑定问题
2012/12/06 Javascript
JavaScript栏目列表隐藏/显示简单实现
2013/04/03 Javascript
zTree插件之多选下拉菜单实例代码
2013/11/06 Javascript
Jquery动态添加及删除页面节点元素示例代码
2014/06/16 Javascript
浅谈Javascript数组索引
2015/07/29 Javascript
JavaScript实现多叉树的递归遍历和非递归遍历算法操作示例
2018/02/08 Javascript
Layui多选只有最后一个值的解决方法
2019/09/02 Javascript
JavaScript this在函数中的指向及实例详解
2019/10/14 Javascript
[01:16:37]【全国守擂赛】第三周决赛 Dark Knight vs. 一个弱队
2020/05/04 DOTA
python删除列表中重复记录的方法
2015/04/28 Python
TensorFlow神经网络优化策略学习
2018/03/09 Python
Python实现计算圆周率π的值到任意位的方法示例
2018/05/08 Python
Python简单基础小程序的实例代码
2019/04/28 Python
如何基于Python批量下载音乐
2019/11/11 Python
django 解决model中类写不到数据库中,数据库无此字段的问题
2020/05/20 Python
如何让python的运行速度得到提升
2020/07/08 Python
Python执行时间的几种计算方法
2020/07/31 Python
css3 条纹化和透明化表格Firefox下测试成功
2014/04/15 HTML / CSS
Html5 Canvas动画基础碰撞检测的实现
2018/12/06 HTML / CSS
阿根廷首家户外用品制造商和经销商:Montagne
2018/02/12 全球购物
世界上最受欢迎的钓鱼诱饵:Rapala
2019/05/02 全球购物
美国购买体育、音乐会和剧院门票网站:SelectATicket
2019/09/08 全球购物
Jacques Lemans德国:奥地利钟表品牌
2019/12/26 全球购物
双立人加拿大官网:Zwilling加拿大
2020/08/10 全球购物
外贸主管求职简历的自我评价
2013/10/23 职场文书
建筑设计学生的自我评价
2014/01/16 职场文书
超市端午节活动方案
2014/01/23 职场文书
文明班级建设方案
2014/05/15 职场文书
营销计划书范文
2015/01/17 职场文书
老乡聚会通知
2015/04/23 职场文书