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 相关文章推荐
PHP4实际应用经验篇(9)
Oct 09 PHP
网站用php实现paypal整合方法
Nov 28 PHP
php数组函数序列之array_intersect() 返回两个或多个数组的交集数组
Nov 10 PHP
PHP乱码问题,UTF-8乱码常见问题小结
Apr 09 PHP
微信access_token的获取开发示例
Apr 16 PHP
thinkphp3.x自定义Action、Model及View的简单实现方法
May 19 PHP
php opendir()列出目录下所有文件的实例代码
Oct 02 PHP
使用PHP免费发送定时短信的实例
Oct 24 PHP
php读取qqwry.dat ip地址定位文件的类实例代码
Nov 15 PHP
基于Laravel实现的用户动态模块开发
Sep 21 PHP
PHP实现获取url地址中顶级域名的方法示例
Jun 05 PHP
laravel框架中路由设置,路由参数和路由命名实例分析
Nov 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
一段php加密解密的代码
2006/10/09 PHP
php cookie名使用点号(句号)会被转换
2014/10/23 PHP
PHP实现图片自动清理的方法
2015/07/08 PHP
Yii2框架数据验证操作实例详解
2018/05/02 PHP
PHP如何实现阿里云短信sdk灵活应用在项目中的方法
2019/06/14 PHP
jQuery模拟超链接点击效果代码
2013/04/21 Javascript
js生成的验证码的实现与技术分析
2014/09/17 Javascript
网站基于flash实现的Banner图切换效果代码
2014/10/14 Javascript
让angularjs支持浏览器自动填表
2014/11/10 Javascript
javascript将异步校验表单改写为同步表单
2015/01/27 Javascript
js实现类似菜单风格的TAB选项卡效果代码
2015/08/28 Javascript
微信小程序中的swiper组件详解
2017/04/14 Javascript
基于js中this和event 的区别(详解)
2017/10/24 Javascript
代码详解Vuejs响应式原理
2017/12/20 Javascript
详解Vue打包优化之code spliting
2018/04/09 Javascript
微信小程序中进行地图导航功能的实现方法
2018/06/29 Javascript
6行代码实现微信小程序页面返回顶部效果
2018/12/28 Javascript
详解如何运行vue项目
2019/04/15 Javascript
Node.js如何优雅的封装一个实用函数的npm包的方法
2019/04/29 Javascript
jquery实现垂直手风琴导航栏
2020/02/18 jQuery
Python3.0与2.X版本的区别实例分析
2014/08/25 Python
python中随机函数random用法实例
2015/04/30 Python
PHP实现发送和接收JSON请求
2018/06/07 Python
Python通过TensorFLow进行线性模型训练原理与实现方法详解
2020/01/15 Python
Tensorflow tf.tile()的用法实例分析
2020/05/22 Python
如何基于Python实现word文档重新排版
2020/09/29 Python
python3通过subprocess模块调用脚本并和脚本交互的操作
2020/12/05 Python
css3实现信纸/同学录效果的示例代码
2018/12/11 HTML / CSS
详解使用双缓存解决Canvas clearRect引起的闪屏问题
2019/04/29 HTML / CSS
世界上最具创新性的增强型知名运动品牌:Proviz
2018/04/03 全球购物
Hotels.com拉丁美洲:从豪华酒店到经济型酒店的预定优惠和折扣
2019/12/09 全球购物
电子商务专业个人的自我评价
2013/12/19 职场文书
车辆年审委托书范本
2014/09/18 职场文书
机关干部作风建设剖析材料
2014/10/23 职场文书
法律意见书范本
2015/06/04 职场文书
经典法律座右铭(50句)
2019/08/15 职场文书