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 相关文章推荐
域名查询代码公布
Oct 09 PHP
图书管理程序(三)
Oct 09 PHP
PHP中break及continue两个流程控制指令区别分析
Apr 18 PHP
iis下php mail函数的sendmail配置方法(官方推荐)
Apr 25 PHP
mysql 查询指定日期时间内sql语句实现原理与代码
Dec 16 PHP
基于PHP读取TXT文件向数据库导入海量数据的方法
Apr 23 PHP
php二维数组排序方法(array_multisort usort)
Dec 25 PHP
ThinkPHP入库出现两次反斜线转义及数据库类转义的解决方法
Nov 04 PHP
php5.2的curl-bug 服务器被php进程卡死问题排查
Sep 19 PHP
PHP三种方式实现链式操作详解
Jan 21 PHP
PHP多种序列化/反序列化的方法详解
Jun 23 PHP
Laravel中的Blade模板引擎示例详解
Oct 10 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采集相关教程之一 CURL函数库
2010/02/15 PHP
初学PHP的朋友 经常问的一些问题。不断更新
2011/08/11 PHP
PHP邮箱验证示例教程
2016/06/01 PHP
php使用正则表达式获取字符串中的URL
2016/12/29 PHP
在Z-Blog中运行代码[html][/html](纯JS版)
2007/03/25 Javascript
JavaScript 比较时间大小的代码
2010/04/24 Javascript
Extjs NumberField后面加单位实现思路
2013/07/30 Javascript
JS实现点击链接取消跳转效果的方法
2014/01/24 Javascript
js function定义函数的几种不错方法
2014/02/27 Javascript
angular.foreach 循环方法使用指南
2015/01/06 Javascript
jQuery实现设置、移除文本框默认值功能
2015/01/13 Javascript
JS实现判断碰撞的方法
2015/02/11 Javascript
JS实现动态给图片添加边框的方法
2015/04/01 Javascript
JS从数组中随机取出几个数组元素的方法
2016/08/02 Javascript
CSS3 media queries结合jQuery实现响应式导航
2016/09/30 Javascript
jQuery ajax 当async为false时解决同步操作失败的问题
2016/11/18 Javascript
完美的js图片轮换效果
2017/02/05 Javascript
微信小程序 后台登录(非微信账号)实例详解
2017/03/31 Javascript
web前端vue之vuex单独一文件使用方式实例详解
2018/01/11 Javascript
vue 插值 v-once,v-text, v-html详解
2018/01/19 Javascript
js循环map 获取所有的key和value的实现代码(json)
2018/05/09 Javascript
Vue路由 重定向和别名的区别说明
2020/09/09 Javascript
Chrome插件开发系列一:弹窗终结者开发实战
2020/10/02 Javascript
Python编程之列表操作实例详解【创建、使用、更新、删除】
2017/07/22 Python
浅谈Django自定义模板标签template_tags的用处
2017/12/20 Python
查看TensorFlow checkpoint文件中的变量名和对应值方法
2018/06/14 Python
Python3中关于cookie的创建与保存
2018/10/21 Python
Python中itertools的用法详解
2020/02/07 Python
美国电子产品折扣网站:Daily Steals
2017/05/20 全球购物
波兰运动鞋网上商店:e-Sporting
2018/02/16 全球购物
英国时尚和家居用品零售商:Matalan
2021/02/28 全球购物
四风问题个人对照检查材料
2014/09/26 职场文书
研究生毕业论文导师评语
2014/12/31 职场文书
环境卫生整治简报
2015/07/20 职场文书
幼儿园中班班级总结
2015/08/10 职场文书
详细聊聊MySQL中慢SQL优化的方向
2021/08/30 MySQL