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读取和编写XML DOM的实现代码
Feb 03 PHP
五款常用mysql slow log分析工具的比较分析
May 22 PHP
PHP隐形一句话后门,和ThinkPHP框架加密码程序(base64_decode)
Nov 02 PHP
分享一下贝贝成长进度的php代码
Sep 14 PHP
PHP笔记之:日期函数的使用介绍
Apr 24 PHP
php读取文件内容的几种方法详解
Jun 26 PHP
php画图实例
Nov 05 PHP
PHP中$this和$that指针使用实例
Jan 06 PHP
PHP记录和读取JSON格式日志文件
Jul 07 PHP
php+js实现百度地图多点标注的方法
Nov 30 PHP
php实现的rc4加密解密类定义与用法示例
Aug 16 PHP
禁止直接访问php文件代码分享
May 05 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数组函数序列之rsort() - 对数组的元素值进行降序排序
2011/11/02 PHP
destoon官方标签大全
2014/06/20 PHP
php生成图片缩略图的方法
2015/04/07 PHP
php简单获取复选框值的方法
2016/05/11 PHP
php获得文件夹下所有文件的递归算法的简单实例
2016/11/01 PHP
js实现鼠标滚轮控制图片缩放效果的方法
2015/02/20 Javascript
javascript实现平滑无缝滚动
2020/08/09 Javascript
Angular工具方法学习
2016/12/26 Javascript
详解Vue 实例中的生命周期钩子
2017/03/21 Javascript
jQuery编写textarea输入字数限制代码
2017/03/23 jQuery
Vue.js实战之通过监听滚动事件实现动态锚点
2017/04/04 Javascript
JavaScript实现简单的树形菜单效果
2017/06/23 Javascript
解决html input验证只能输入数字,不能输入其他的问题
2017/07/21 Javascript
Vue实现typeahead组件功能(非常靠谱)
2017/08/26 Javascript
vue获取input输入值的问题解决办法
2017/10/17 Javascript
基于vue 添加axios组件,解决post传参数为null的问题
2018/03/05 Javascript
vue内置指令详解
2018/04/03 Javascript
Vue+Element实现网页版个人简历系统(推荐)
2019/12/31 Javascript
JavaScript交换变量的常用方法小结【4种方法】
2020/05/07 Javascript
Python数据类型学习笔记
2016/01/13 Python
Python使用logging模块实现打印log到指定文件的方法
2018/09/05 Python
浅析python中的迭代与迭代对象
2018/10/08 Python
python将txt文档每行内容循环插入数据库的方法
2018/12/28 Python
python微信撤回监测代码
2019/04/29 Python
Python Scrapy框架第一个入门程序示例
2020/02/05 Python
django Model层常用验证器及自定义验证器详解
2020/07/15 Python
Python2与Python3关于字符串编码处理的差别总结
2020/09/07 Python
通用的Django注册功能模块实现方法
2021/02/05 Python
海信商城:海信电视、科龙空调、容声冰箱官方专卖
2017/02/07 全球购物
保时捷设计:Porsche Design
2019/03/30 全球购物
电脑租赁公司创业计划书
2014/01/08 职场文书
信息技术教学反思
2014/02/12 职场文书
2014年“向国旗敬礼”网上签名寄语活动方案
2014/09/27 职场文书
关于python类SortedList详解
2021/09/04 Python
通过feDisplacementMap和feImage实现水波特效
2022/04/24 HTML / CSS
SpringBoot项目部署到阿里云服务器的实现步骤
2022/06/28 Java/Android