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中MD5函数使用实例代码
Jun 07 PHP
不用mod_rewrite直接用php实现伪静态化页面代码
Oct 04 PHP
php实现在线生成条形码示例分享(条形码生成器)
Dec 30 PHP
smarty中js的调用方法示例
Oct 27 PHP
PHP执行linux命令常用函数汇总
Feb 02 PHP
PHP中的表达式简述
May 29 PHP
php获取开始与结束日期之间所有日期的方法
Nov 29 PHP
phpcms的分类名称和类别名称的调用
Jan 05 PHP
php实现文件上传及头像预览功能
Jan 15 PHP
yii2利用自带UploadedFile实现上传图片的示例
Feb 16 PHP
PHP基于Redis消息队列实现发布微博的方法
May 03 PHP
Laravel5.4简单实现app接口Api Token认证方法
Aug 29 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 IP转换整形(ip2long)的详解
2013/06/06 PHP
解析file_get_contents模仿浏览器头(user_agent)获取数据
2013/06/27 PHP
如何利用PHP执行.SQL文件
2013/07/05 PHP
PHP中的按位与和按位或操作示例
2014/01/27 PHP
PHP中使用GD库创建圆形饼图的例子
2014/11/19 PHP
PHP检测用户是否关闭浏览器的方法
2016/02/14 PHP
PHP 序列化和反序列化函数实例详解
2020/07/18 PHP
js或css文件后面跟参数的原因说明
2010/01/09 Javascript
Jsonp 跨域的原理以及Jquery的解决方案
2010/05/18 Javascript
ie下jquery.getJSON的缓存问题的处理方法
2013/03/29 Javascript
jQuery使用技巧简单汇总
2013/04/18 Javascript
可选择和输入的下拉列表框示例
2013/11/05 Javascript
JQuery实现鼠标移动到图片上显示边框效果
2014/01/09 Javascript
浅谈jQuery中setInterval()方法
2015/07/07 Javascript
jQuery往返城市和日期查询实例讲解
2015/10/09 Javascript
Jquery中request和request.form和request.querystring的区别
2015/11/26 Javascript
JS仿百度自动下拉框模糊匹配提示
2016/07/25 Javascript
jQuery模拟实现天猫购物车动画效果实例代码
2017/05/25 jQuery
js使用highlight.js高亮你的代码
2017/08/18 Javascript
微信小程序基于本地缓存实现点赞功能的方法
2017/12/18 Javascript
详解webpack运行Babel教程
2018/06/13 Javascript
python中的列表推导浅析
2014/04/26 Python
Python中Random和Math模块学习笔记
2015/05/18 Python
Python中urllib+urllib2+cookielib模块编写爬虫实战
2016/01/20 Python
Python生成密码库功能示例
2017/05/23 Python
基于Django filter中用contains和icontains的区别(详解)
2017/12/12 Python
Python装饰器原理与简单用法实例分析
2018/04/29 Python
与Django结合利用模型对上传图片预测的实例详解
2019/08/07 Python
详解Python3 中的字符串格式化语法
2020/01/15 Python
HTML5 图片预加载的示例代码
2020/03/25 HTML / CSS
电大毕业个人生自我鉴定
2014/03/26 职场文书
2014年党务公开方案
2014/05/08 职场文书
2016计划生育先进个人事迹材料
2016/02/29 职场文书
心得体会该怎么写呢?
2019/06/27 职场文书
企业版Windows 11有哪些新功能? Win11适用于企业的功能介绍
2021/11/21 数码科技
苹果的回收机器人可以通过拆解iPhone获取大量的金和铜并外公布了环境保护最新进展
2022/04/21 数码科技