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 相关文章推荐
PHP EOT定界符的使用详解
Sep 30 PHP
解析PHP无限级分类方法及代码
Jun 21 PHP
php jquery 多文件上传简单实例
Dec 23 PHP
一个好用的PHP验证码类实例分享
Dec 27 PHP
Thinkphp的volist标签嵌套循环使用教程
Jul 08 PHP
PHP解析目录路径的3个函数总结
Nov 18 PHP
php+jQuery.uploadify实现文件上传教程
Dec 26 PHP
Yii框架引用插件和ckeditor中body与P标签去除的方法
Jan 19 PHP
php求数组全排列,元素所有组合的方法总结
Mar 14 PHP
Yii2设置默认控制器的两种方法
May 19 PHP
PHP框架自动加载类文件原理详解
Jun 06 PHP
PHP数据源架构模式之表入口模式实例分析
Jan 23 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
php array_map array_multisort 高效处理多维数组排序
2009/06/11 PHP
php连接oracle数据库的核心步骤
2016/05/26 PHP
PHP二维数组实现去除重复项的方法【保留各个键值】
2017/12/21 PHP
jquery中.add()的使用分析
2013/04/26 Javascript
不使用浏览器运行javascript代码的方法
2013/07/24 Javascript
可简单避免的三个JS发布错误的详细介绍
2013/08/02 Javascript
js 判断控件获得焦点的示例代码
2014/03/04 Javascript
jQuery幻灯片带缩略图轮播效果代码分享
2015/08/17 Javascript
简单介绍jsonp 使用小结
2016/01/27 Javascript
JS刷新父窗口的几种方式小结(推荐)
2016/11/09 Javascript
JS常用算法实现代码
2016/11/14 Javascript
jquery 多个radio的click事件实例
2016/12/03 Javascript
javascript 面向对象function详解及实例代码
2017/02/28 Javascript
js实现常见的工具条效果
2017/03/02 Javascript
Mongoose经常返回e11000 error的原因分析
2017/03/29 Javascript
jquery实现点击a链接,跳转之后,该a链接处显示背景色的方法
2018/01/18 jQuery
你点的 ES6一些小技巧,请查收
2018/04/25 Javascript
原生js实现密码强度验证功能
2020/03/18 Javascript
JS实现进度条动态加载特效
2020/03/25 Javascript
python实现ipsec开权限实例
2014/11/11 Python
python使用分治法实现求解最大值的方法
2015/05/12 Python
解决seaborn在pycharm中绘图不出图的问题
2018/05/24 Python
numpy matrix和array的乘和加实例
2018/06/28 Python
Opencv+Python 色彩通道拆分及合并的示例
2018/12/08 Python
Django中自定义admin Xadmin的实现代码
2019/08/09 Python
Windows10下Tensorflow2.0 安装及环境配置教程(图文)
2019/11/21 Python
Python中使用gflags实例及原理解析
2019/12/13 Python
tensorflow保持每次训练结果一致的简单实现
2020/02/17 Python
python matplotlib实现将图例放在图外
2020/04/17 Python
有关HTML5 Video对象的ontimeupdate事件(Chrome上无效)的问题
2013/07/19 HTML / CSS
集体备课反思
2014/02/12 职场文书
小学教学随笔感言
2014/02/26 职场文书
2014感恩节演讲稿大全
2014/10/11 职场文书
公司领导班子召开党的群众路线教育实践活动总结大会新闻稿
2014/10/21 职场文书
二审答辩状范文
2015/05/22 职场文书
NodeJs使用webpack打包项目的方法详解
2022/02/28 NodeJs