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安全配置
Oct 09 PHP
社区(php&amp;&amp;mysql)二
Oct 09 PHP
ADODB结合SMARTY使用~超级强
Nov 25 PHP
Mysql数据库操作类( 1127版,提供源码下载 )
Dec 02 PHP
php表单提交问题的解决方法
Apr 12 PHP
ThinkPHP3.1新特性之查询条件预处理简介
Jun 19 PHP
2个Codeigniter文件批量上传控制器写法例子
Jul 25 PHP
PHP、Python和Javascript的装饰器模式对比
Feb 03 PHP
PHP获取昨天、今天及明天日期的方法
Feb 03 PHP
总结PHP删除字符串最后一个字符的三种方法
Aug 30 PHP
详解yii2实现分库分表的方案与思路
Feb 03 PHP
关于PHP中interface的用处详解
Jul 26 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转换超过2038年日期出错的问题解决
2017/06/28 PHP
JavaScript 在线压缩和格式化收藏
2009/01/16 Javascript
屏蔽Flash右键信息的js代码
2010/01/17 Javascript
JS input文本框禁用右键和复制粘贴功能的代码
2010/04/15 Javascript
JS操作select下拉框动态变动(创建/删除/获取)
2013/06/02 Javascript
JavaScript中跨域调用Flash的方法
2014/08/11 Javascript
jquery.ajax之beforeSend方法使用介绍
2014/12/08 Javascript
jquery拖拽效果完整实例(附demo源码下载)
2016/01/14 Javascript
JavaScript判断变量是否为数组的方法(Array)
2016/02/24 Javascript
浅谈js中子页面父页面方法 变量相互调用
2016/08/04 Javascript
AngularJs  Understanding Angular Templates
2016/09/02 Javascript
jQuery插件zTree实现清空选中第一个节点所有子节点的方法
2017/03/08 Javascript
使用bootstrap-paginator.js 分页来进行ajax 异步分页请求示例
2017/03/09 Javascript
Vue.js实现实例搜索应用功能详细代码
2017/08/24 Javascript
Angular浏览器插件Batarang介绍及使用
2018/02/07 Javascript
vue加载自定义的js文件方法
2018/03/13 Javascript
Puppet的一些技巧
2018/09/17 Javascript
跟老齐学Python之Python文档
2014/10/10 Python
python使用arp欺骗伪造网关的方法
2015/04/24 Python
Django contenttypes 框架详解(小结)
2018/08/13 Python
对python中基于tcp协议的通信(数据传输)实例讲解
2019/07/22 Python
Python实现微信小程序支付功能
2019/07/25 Python
python文字转语音的实例代码分析
2019/11/12 Python
基于keras中的回调函数用法说明
2020/06/17 Python
MATLAB数学建模之画图汇总
2020/07/16 Python
python对 MySQL 数据库进行增删改查的脚本
2020/10/22 Python
viagogo英国票务平台:演唱会、体育比赛、戏剧门票
2017/03/24 全球购物
台湾最大银发乐活百货:乐龄网
2018/05/21 全球购物
Flesh Beauty官网:露华浓集团旗下彩妆品牌
2021/02/15 全球购物
C#公司笔试题
2014/03/28 面试题
医务人员自我评价
2014/01/26 职场文书
服务承诺口号
2014/05/22 职场文书
公司经理任命书
2014/06/05 职场文书
预备党员对照检查材料思想汇报
2014/09/24 职场文书
spring boot中nativeQuery的用法
2021/07/26 Java/Android
SQL CASE 表达式的具体使用
2022/03/21 SQL Server