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 相关文章推荐
在apache下限制每个虚拟主机的并发数!!!!
Oct 09 PHP
打造计数器DIY三步曲(下)
Oct 09 PHP
PHP 高手之路(一)
Oct 09 PHP
php中防止SQL注入的最佳解决方法
Apr 25 PHP
浅谈php命令行用法
Feb 04 PHP
php关闭warning问题的解决方法
May 17 PHP
PHP使用PHPExcel删除Excel单元格指定列的方法
Jul 06 PHP
Laravel5中防止XSS跨站攻击的方法
Oct 10 PHP
[原创]php实现 data url的图片生成与保存
Dec 04 PHP
YII2框架中excel表格导出的方法详解
Jul 21 PHP
laravel框架的安装与路由实例分析
Oct 11 PHP
thinkphp诸多限制条件下如何getshell详解
Dec 09 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
《魔兽争霸3:重制版》更新 多项视觉效果调整
2020/05/04 魔兽争霸
PHP新手NOTICE错误常见解决方法
2011/12/07 PHP
PHP上传文件时自动分配路径的方法
2015/01/09 PHP
php将字符串全部转换成大写或者小写的方法
2015/03/17 PHP
PHP 闭包详解及实例代码
2016/09/28 PHP
PHP receiveMail实现收邮件功能
2018/04/25 PHP
PHP7 新增常量
2021/03/09 PHP
复选框全选与全不选操作实现思路
2013/08/18 Javascript
Javascript 按位左移运算符使用介绍(
2014/02/04 Javascript
JS获取下拉框显示值和判断单选按钮的方法
2015/07/09 Javascript
JavaScript必知必会(六) delete in instanceof
2016/06/08 Javascript
AngularJS基础 ng-switch 指令简单示例
2016/08/03 Javascript
AngularJS基于ui-route实现深层路由的方法【路由嵌套】
2016/12/14 Javascript
JS百度地图搜索悬浮窗功能
2017/01/12 Javascript
Vue使用json-server进行后端数据模拟功能
2018/04/17 Javascript
超简单的微信小程序轮播图
2019/11/22 Javascript
Vue开发中遇到的跨域问题及解决方法
2020/02/11 Javascript
解决三元运算符 报错“SyntaxError: can''t assign to conditional expression”
2020/02/12 Javascript
Python爬虫模拟登录带验证码网站
2016/01/22 Python
python访问抓取网页常用命令总结
2017/04/11 Python
Flask框架Jinjia模板常用语法总结
2018/07/19 Python
详解Python中is和==的区别
2019/03/21 Python
python GUI库图形界面开发之PyQt5图片显示控件QPixmap详细使用方法与实例
2020/02/27 Python
Django实现将views.py中的数据传递到前端html页面,并展示
2020/03/16 Python
基于Python绘制个人足迹地图
2020/06/01 Python
keras 回调函数Callbacks 断点ModelCheckpoint教程
2020/06/18 Python
Python3爬虫中Ajax的用法
2020/07/10 Python
Steve Madden官网:美国鞋类品牌
2017/01/29 全球购物
新加坡一家在线男士皮具品牌:Faire Leather Co.
2019/12/01 全球购物
业务代表的岗位职责
2013/11/16 职场文书
护理专业优质毕业生自荐书
2014/01/31 职场文书
本科毕业生应聘自荐信范文
2014/06/26 职场文书
2015年个人工作总结报告
2015/04/25 职场文书
求职自荐信该如何书写?
2019/06/24 职场文书
Python实现拼音转换
2021/06/07 Python
Javascript webpack动态import
2022/04/19 Javascript