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&amp;&amp;mysql)五
Oct 09 PHP
用PHP和ACCESS写聊天室(五)
Oct 09 PHP
php 连接mssql数据库 初学php笔记
Mar 01 PHP
PHP随机数生成代码与使用实例分析
Apr 08 PHP
WordPress中获取页面链接和标题的相关PHP函数用法解析
Dec 17 PHP
Codeigniter控制器controller继承问题实例分析
Jan 19 PHP
Zend Framework动作助手FlashMessenger用法详解
Mar 05 PHP
Thinkphp3.2.3整合phpqrcode生成带logo的二维码
Jul 21 PHP
ThinkPHP框架分布式数据库连接方法详解
Mar 14 PHP
PHP基于MySQLI函数封装的数据库连接工具类【定义与用法】
Aug 11 PHP
PHP中使用mpdf 导出PDF文件的实现方法
Oct 22 PHP
laravel实现按时间日期进行分组统计方法示例
Mar 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
ThinkPHP实现非标准名称数据表快速创建模型的方法
2014/11/29 PHP
php header函数的常用http头设置
2015/06/25 PHP
动态调用CSS文件的JS代码
2010/07/29 Javascript
Raphael一个用于在网页中绘制矢量图形的Javascript库
2013/01/08 Javascript
js时钟翻牌效果实现代码分享
2020/07/31 Javascript
15个值得开发人员关注的jQuery开发技巧和心得总结【经典收藏】
2016/05/25 Javascript
AngularJS国际化详解及示例代码
2016/08/18 Javascript
vue制作加载更多功能的正确打开方式
2016/10/12 Javascript
微信小程序 swiper组件轮播图详解及实例
2016/11/16 Javascript
vue基于Vue2.0和高德地图的地图组件实例
2017/04/28 Javascript
Angular中的$watch方法详解
2017/09/18 Javascript
使用FileReader API创建Vue文件阅读器组件
2018/04/03 Javascript
浅谈angularJs函数的使用方法(大小写转换,拷贝,扩充对象)
2018/10/08 Javascript
vue+node实现图片上传及预览的示例方法
2018/11/22 Javascript
JS实现点击li标签弹出对应的索引功能【案例】
2019/02/18 Javascript
jQuery中DOM常见操作实例小结
2019/08/01 jQuery
JS中async/await实现异步调用的方法
2019/08/28 Javascript
js判断密码强度的方法
2020/03/18 Javascript
Python 比较两个数组的元素的异同方法
2017/08/17 Python
python实现12306抢票及自动邮件发送提醒付款功能
2018/03/08 Python
python 实现将字典dict、列表list中的中文正常显示方法
2018/07/06 Python
python flask解析json数据不完整的解决方法
2019/05/26 Python
python单例模式的多种实现方法
2019/07/26 Python
python3 字符串知识点学习笔记
2020/02/08 Python
解决tensorboard多个events文件显示紊乱的问题
2020/02/15 Python
python使用QQ邮箱实现自动发送邮件
2020/06/22 Python
Python爬虫实现自动登录、签到功能的代码
2020/08/20 Python
简单了解Python字典copy与赋值的区别
2020/09/16 Python
HTML5 播放 RTSP 视频的实例代码
2019/07/29 HTML / CSS
AmazeUI 列表的实现示例
2020/08/17 HTML / CSS
英国最大的奢侈品零售网络商城:Flannels
2016/09/16 全球购物
C++程序员求职信范文
2014/04/14 职场文书
2016教师廉洁从教心得体会
2016/01/13 职场文书
Golang二维数组的使用方式
2021/05/28 Golang
MySql重置root密码 --skip-grant-tables
2022/04/11 MySQL
详细介绍Next.js脚手架完整搭建封装
2022/04/26 Javascript