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文件上传实例详解!!!
Jan 02 PHP
php array_flip() 删除数组重复元素
Jan 14 PHP
php 获取一个月第一天与最后一天的代码
May 16 PHP
php自动获取字符串编码函数mb_detect_encoding
May 31 PHP
深入PHP empty(),isset(),is_null()的实例测试详解
Jun 06 PHP
php生成excel文件的简单方法
Feb 08 PHP
php获取字符串中各个字符出现次数的方法
Feb 23 PHP
php计算指定目录下文件占用空间的方法
Mar 13 PHP
php三种实现多线程类似的方法
Oct 30 PHP
微信获取用户地理位置信息的原理与步骤
Nov 12 PHP
详解PHP swoole process的使用方法
Aug 26 PHP
php自定义排序uasort函数示例【二维数组按指定键值排序】
Jun 19 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 date函数参数详解
2006/11/27 PHP
php下获取客户端ip地址的函数
2010/03/15 PHP
ExtJs Excel导出并下载IIS服务器端遇到的问题
2011/09/16 Javascript
js实现显示当前状态的导航效果代码
2015/08/28 Javascript
jQuery实现三级联动效果
2017/03/02 Javascript
js放到head中失效的原因与解决方法
2017/03/07 Javascript
jQuery实现可拖动进度条实例代码
2017/06/21 jQuery
javascript 开发之网页兼容各种浏览器
2017/09/28 Javascript
JS异步执行结果获取的3种解决方式
2019/02/19 Javascript
详解ES6中的Map与Set集合
2019/03/22 Javascript
js tab栏切换代码实例解析
2019/09/03 Javascript
Vue如何循环提取对象数组中的值
2020/11/18 Vue.js
[03:12]2016完美“圣”典风云人物:单车专访
2016/12/02 DOTA
Python操作配置文件ini的三种方法讲解
2019/02/22 Python
Python实现计算文件MD5和SHA1的方法示例
2019/06/11 Python
wxPython电子表格功能wx.grid实例教程
2019/11/19 Python
Python脚本导出为exe程序的方法
2020/03/25 Python
用python 绘制茎叶图和复合饼图
2021/02/26 Python
纯CSS3打造动感漂亮时尚的扇形菜单
2014/03/18 HTML / CSS
地球上最先进的胡子和头发修剪器:Bevel
2018/01/23 全球购物
行政人员岗位职责
2013/12/08 职场文书
大学生村官事迹材料
2014/01/21 职场文书
教师考核材料
2014/05/21 职场文书
副总经理任命书
2014/06/05 职场文书
上海世博会口号
2014/06/19 职场文书
2014中学教师节广播稿
2014/09/10 职场文书
党的群众路线教育实践活动领导班子对照检查材料
2014/09/25 职场文书
市委常委班子党的群众路线教育实践活动整改措施
2014/10/02 职场文书
判缓刑人员个人思想汇报
2014/10/10 职场文书
三严三实学习心得体会
2014/10/13 职场文书
大学生暑期社会实践证明范本
2014/10/24 职场文书
公务员考察材料范文
2014/12/23 职场文书
英语教师求职信范文
2015/03/20 职场文书
工程技术负责人岗位职责
2015/04/13 职场文书
Pytorch中的数据集划分&正则化方法
2021/05/27 Python
MySQL生成千万测试数据以及遇到的问题
2022/08/05 MySQL