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
在PHP3中实现SESSION的功能(三)
Oct 09 PHP
php中将地址生成迅雷快车旋风链接的代码[测试通过]
Apr 20 PHP
php入门学习知识点五 关于php数组的几个基本操作
Jul 14 PHP
php学习笔记之面向对象编程
Dec 29 PHP
PHP引用(&amp;)各种使用方法实例详解
Mar 20 PHP
php文件操作相关类实例
Jun 18 PHP
在Mac OS的PHP环境下安装配置MemCache的全过程解析
Feb 15 PHP
浅谈php fopen下载远程文件的函数
Nov 18 PHP
PHP框架laravel的.env文件配置教程
Jun 07 PHP
PHP长连接实现与使用方法详解
Feb 11 PHP
Laravel-添加后台模板AdminLte的实现方法
Oct 08 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 无线电
PHP运行出现Notice : Use of undefined constant 的完美解决方案分享
2012/03/05 PHP
PHP实现根据设备类型自动跳转相应页面的方法
2014/07/24 PHP
php新浪微博登录接口用法实例
2014/12/23 PHP
PHP保存带BOM文件的方法
2015/02/12 PHP
PHP aes (ecb)解密后乱码问题
2015/06/22 PHP
PHP中register_shutdown_function函数的基础介绍与用法详解
2017/11/28 PHP
ThinkPHP框架中使用Memcached缓存数据的方法
2018/03/31 PHP
PHP7使用ODBC连接SQL Server2008 R2数据库示例【基于thinkPHP5.1框架】
2019/05/06 PHP
PHP实现创建一个RPC服务操作示例
2020/02/23 PHP
使用javascipt---实现二分查找法
2013/04/10 Javascript
浅析Js中的单引号与双引号问题
2013/11/06 Javascript
jQuery实现一个简单的轮播图
2017/02/19 Javascript
AngularJS实现表格的增删改查(仅限前端)
2017/07/04 Javascript
Vue.js组件通信的几种姿势
2017/10/23 Javascript
vue获取dom元素注意事项
2017/12/28 Javascript
vue-prop父组件向子组件进行传值的方法
2018/03/01 Javascript
python操作xml文件示例
2014/04/07 Python
Python可变参数用法实例分析
2017/04/02 Python
Python同步遍历多个列表的示例
2019/02/19 Python
python config文件的读写操作示例
2019/09/27 Python
python调用Matplotlib绘制分布点图
2019/10/18 Python
python中zip()函数遍历多个列表方法
2021/02/18 Python
解决pytorch 保存模型遇到的问题
2021/03/03 Python
菲律宾最大的网上花店和礼品店:PhilFlower.com
2018/02/09 全球购物
次世代生活态度:Hypebeast
2018/07/05 全球购物
.net工程师笔试题
2012/06/09 面试题
餐饮业会计岗位职责
2013/12/19 职场文书
捐资助学倡议书
2014/04/15 职场文书
不错的求职信范文
2014/07/20 职场文书
党员批评与自我批评思想汇报(集锦)
2014/09/14 职场文书
2015年工会工作总结
2015/03/30 职场文书
公务员保密工作承诺书
2015/05/04 职场文书
同学聚会祝酒词
2015/08/10 职场文书
mysql配置SSL证书登录的实现
2021/09/04 MySQL
win server2012 r2服务器共享文件夹如何设置
2022/06/21 Servers