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
PHP版网站缓存加快打开速度的方法分享
Jun 03 PHP
PHP基础陷阱题(变量赋值)
Sep 12 PHP
PHP 中关于ord($str)&amp;gt;0x80的详细说明
Sep 23 PHP
做了CDN获取用户真实IP的函数代码(PHP与Asp设置方式)
Apr 13 PHP
PHP中设置一个严格30分钟过期Session面试题的4种答案
Jul 30 PHP
使用纯php代码实现页面伪静态的方法
Jul 25 PHP
php版微信小店API二次开发及使用示例
Nov 12 PHP
php微信高级接口调用方法(自定义菜单接口、客服接口、二维码)
Nov 28 PHP
php根据地址获取百度地图经纬度的实例方法
Sep 03 PHP
laravel 实现设置时区的简单方法
Oct 10 PHP
Laravel5.1 框架响应基本用法实例分析
Jan 04 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生成随机字符串可指定纯数字、纯字母或者混合的
2014/04/18 PHP
php中__destruct与register_shutdown_function执行的先后顺序问题
2014/10/17 PHP
十个PHP高级应用技巧果断收藏
2015/09/25 PHP
thinkPHP模板引擎用法示例
2016/12/08 PHP
PHP 进度条函数的简单实例
2017/09/19 PHP
asp函数split()对应php函数explode()
2019/02/27 PHP
Javascript YUI 读码日记之 YAHOO.util.Dom - Part.3
2008/03/22 Javascript
ASP SQL防注入的方法
2008/12/25 Javascript
jquery中动态效果小结
2010/12/16 Javascript
JavaScript动态调整TextArea高度的代码
2010/12/28 Javascript
使用js对select动态添加和删除OPTION示例代码
2013/08/12 Javascript
jquery使用正则表达式验证email地址的方法
2015/01/22 Javascript
Javascript中arguments和arguments.callee的区别浅析
2015/04/24 Javascript
HTML5之WebSocket入门3 -通信模型socket.io
2015/08/21 Javascript
使用JQuery实现的分页插件分享
2015/11/05 Javascript
js实现select二级联动下拉菜单
2020/04/17 Javascript
Vue插件之滑动验证码用法详解
2020/04/05 Javascript
es6数组includes()用法实例分析
2020/04/18 Javascript
[48:21]Mski vs VGJ.S Supermajor小组赛C组 BO3 第一场 6.3
2018/06/04 DOTA
python使用cookielib库示例分享
2014/03/03 Python
Django调用支付宝接口代码实例详解
2020/04/04 Python
Python3爬虫RedisDump的安装步骤
2021/02/20 Python
详解使用HTML5的classList属性操作CSS类
2017/10/13 HTML / CSS
安纳塔拉酒店度假村及水疗官方网站:Anantara Hotel
2016/08/25 全球购物
全球领先的各类汽车配件零售商:Advance Auto Parts
2016/08/26 全球购物
美国珠宝店:Helzberg Diamonds
2018/10/24 全球购物
平面设计师工作职责范文
2013/12/03 职场文书
教师产假请假条
2014/04/10 职场文书
党的群众路线对照检查材料(个人)
2014/09/24 职场文书
本科毕业论文指导教师评语
2014/12/30 职场文书
给老师的感谢信
2015/01/20 职场文书
同步小康驻村工作简报
2015/07/20 职场文书
2015重阳节座谈会主持词
2015/07/30 职场文书
Python进行区间取值案例讲解
2021/08/02 Python
Mysql忘记密码解决方法
2022/02/12 MySQL
centos环境下nginx高可用集群的搭建指南
2022/07/23 Servers