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中通过Ajax如何实现异步文件上传的代码实例
May 07 PHP
php开发过程中关于继承的使用方法分享
Jun 17 PHP
php中用于检测一个地理IP地址是否可用的代码
Feb 19 PHP
is_uploaded_file函数引发的不能上传文件问题
Oct 29 PHP
php根据操作系统转换文件名大小写的方法
Feb 24 PHP
给WordPress中的留言加上楼层号的PHP代码实例
Dec 14 PHP
详解HTTP Cookie状态管理机制
Jan 14 PHP
Yii2中关联查询简单用法示例
Aug 10 PHP
详细解读php的命名空间(二)
Feb 21 PHP
基于Laravel(5.4版本)的基本增删改查操作方法
Oct 11 PHP
laravel实现前后台路由分离的方法
Oct 13 PHP
PHP实现简单的协程任务调度demo示例
Feb 01 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
收音机术语解释
2021/03/01 无线电
实现dedecms全站URL静态化改造的代码
2007/03/29 PHP
Http 1.1 Etag 与 Last-Modified提高php效率
2008/01/10 PHP
PHP 获取文件路径(灵活应用__FILE__)
2013/02/15 PHP
php格式化电话号码的方法
2015/04/24 PHP
PHP全局使用Laravel辅助函数dd
2019/12/26 PHP
TP5框架页面跳转样式操作示例
2020/04/05 PHP
用javascript父窗口控制只弹出一个子窗口
2007/04/10 Javascript
在模板页面的js使用办法
2010/04/01 Javascript
JS函数实现动态添加CSS样式表文件
2012/12/15 Javascript
js实现两个值相加alert出来精确到指定位
2013/09/25 Javascript
javascript根据时间生成m位随机数最大13位
2014/10/30 Javascript
浅谈jQuery异步对象(XMLHttpRequest)
2014/11/17 Javascript
JavaScript动态修改弹出窗口大小的方法
2015/04/06 Javascript
JavaScript数据结构与算法之集合(Set)
2016/01/29 Javascript
JQuery日期插件datepicker的使用方法
2016/03/03 Javascript
JavaScript算法系列之快速排序(Quicksort)算法实例详解
2016/09/04 Javascript
js 判断附件后缀的简单实现方法
2016/10/11 Javascript
jquery+css实现简单的图片轮播效果
2017/08/07 jQuery
深入理解React高阶组件
2017/09/28 Javascript
在 webpack 中使用 ECharts的实例详解
2018/02/05 Javascript
JsChart组件使用详解
2018/03/04 Javascript
弱类型语言javascript中 a,b 的运算实例小结
2019/08/07 Javascript
vuex根据不同的用户权限展示不同的路由列表功能
2019/09/20 Javascript
python中set()函数简介及实例解析
2018/01/09 Python
pycharm运行出现ImportError:No module named的解决方法
2018/10/13 Python
初次部署django+gunicorn+nginx的方法步骤
2019/09/11 Python
Python利用matplotlib绘制约数个数统计图示例
2019/11/26 Python
在keras中对单一输入图像进行预测并返回预测结果操作
2020/07/09 Python
幼儿园教师国培感言
2014/02/02 职场文书
检举信的格式及范文
2014/04/04 职场文书
社区平安建设方案
2014/05/25 职场文书
金融与证券专业求职信
2014/06/22 职场文书
电台广播稿范文
2015/08/19 职场文书
2019年公司卫生管理制度样本
2019/08/21 职场文书
一次项目中Thinkphp绕过禁用函数的实战记录
2021/11/17 PHP