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 相关文章推荐
PHPLog php 程序调试追踪工具
Sep 09 PHP
phplock(php进程锁) v1.0 beta1
Nov 24 PHP
PHP 开发环境配置(Zend Studio)
Apr 28 PHP
php数据结构与算法(PHP描述) 查找与二分法查找
Jun 21 PHP
destoon实现商铺管理主页设置增加新菜单的方法
Jun 26 PHP
php使用session二维数组实例
Nov 06 PHP
php用户注册时常用的检验函数实例总结
Dec 22 PHP
WordPress中限制非管理员用户在文章后只能评论一次
Dec 31 PHP
深入解析PHP的Yii框架中的缓存功能
Mar 29 PHP
php常用数组array函数实例总结【赋值,拆分,合并,计算,添加,删除,查询,判断,排序】
Dec 07 PHP
利用PHP获取网站访客的所在地位置
Jan 18 PHP
php检查函数必传参数是否存在的实例详解
Aug 28 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 字符转义 注意事项
2009/05/27 PHP
php中使用websocket详解
2016/09/23 PHP
php 获取文件行数的方法总结
2016/10/11 PHP
IOS 开发之NSDictionary转换成JSON字符串
2017/08/14 PHP
php 根据URL下载远程图片、压缩包、pdf等文件到本地
2019/07/26 PHP
Thinkphp5框架实现图片、音频和视频文件的上传功能详解
2019/08/27 PHP
javascript 火狐(firefox)不显示本地图片问题解决
2008/07/05 Javascript
Javascript笔记一 js以及json基础使用说明
2010/05/22 Javascript
输入框的字数时时统计—关于 onpropertychange 和 oninput 使用
2011/10/21 Javascript
javascript同页面多次调用弹出层具体实例代码
2013/08/16 Javascript
jquery 页面滚动到指定DIV实现代码
2013/09/25 Javascript
Extjs4实现两个GridPanel之间数据拖拽功能具体方法
2013/11/21 Javascript
jQuery+Ajax实现限制查询间隔的方法
2016/06/07 Javascript
Javascript之String对象详解
2016/06/08 Javascript
jQuery EasyUI提交表单验证
2016/07/19 Javascript
JS ES6中setTimeout函数的执行上下文示例
2017/04/27 Javascript
原生JS实现图片懒加载(lazyload)实例
2017/06/13 Javascript
浅谈react.js中实现tab吸顶效果的问题
2017/09/06 Javascript
详解node.js中的npm和webpack配置方法
2018/01/21 Javascript
JavaScript设计模式之享元模式实例详解
2019/01/17 Javascript
vue踩坑记录之数组定义和赋值问题
2019/03/20 Javascript
移动端底部导航固定配合vue-router实现组件切换功能
2019/06/13 Javascript
利用JavaScript将Excel转换为JSON示例代码
2019/06/14 Javascript
[00:34]DOTA2上海特级锦标赛 VG战队宣传片
2016/03/04 DOTA
[00:20]TI9不朽观赛名额抽取
2019/08/05 DOTA
在漏洞利用Python代码真的很爽
2007/08/26 Python
解决python2.7 查询mysql时出现中文乱码
2016/10/09 Python
python装饰器-限制函数调用次数的方法(10s调用一次)
2018/04/21 Python
Python 模拟动态产生字母验证码图片功能
2019/12/24 Python
写给保洁员表扬信
2014/01/08 职场文书
2014信息技术专业毕业生自我评价
2014/01/17 职场文书
颁奖晚会主持词
2014/03/25 职场文书
个人四风问题对照检查材料思想汇报
2014/10/06 职场文书
Redis集群的关闭与重启操作
2021/07/07 Redis
MySQL连接控制插件介绍
2021/09/25 MySQL
PostgreSQL并行计算算法及参数强制并行度设置方法
2022/04/07 PostgreSQL