php 策略模式原理与应用深入理解


Posted in PHP onSeptember 25, 2019

本文实例讲述了php 策略模式原理与应用。分享给大家供大家参考,具体如下:

策略模式 简单理解就是 有n个做法供你选择,根据你的需要选择某个策略得到结果

就应用场景来说:

例1:比如购买商品需要支付,你可以提供 微信支付、支付宝支付、支付通支付。。。。(不同的支付方式就是不同的策略)

例2:购物车对产品的计价,如非vip 按原价计算 、vip按8折计算、有推广积分的可以用100积分抵20块。。。(不同的客户条件计价算法有所不同,只是这里的策略选择是根据登录顾客资料来变动的,当然也可以用观察者模式)

例3:计算器,计算两个值得结果,你可以用加法、减法、乘法、除法。。。(不同的算法就是不同的策略)

从应用我们就能进一步思考如何去用代码架构去实现这个过程!

分析:

1.首先策略模式肯定有很多种策略,而不同的策略都是一个拥有自己算法的对象,所以可以用一个接口或抽象类来框定 策略角色(虽然策略角色的共同点就都有一个算法)

2.各种策略都定好了,需要有一个类来实现将你选择的策略拿过来使用,官方的说法就是环境角色,不去理解他字面的意思,简单认为就是 拿某一个策略来使用

接下来看一个百度到的简单实例,抄用原因是简单易懂,能立即理解(网址:https://3water.com/article/170770.htm)

//实现一个简单的计算器 (策略接口类)
interface MathOp{
  public function calculation($num1,$num2);
}
//加法 (策略一 策略具体实现,继承策略接口)
class MathAdd implements MathOp{
  public function calculation($num1,$num2){
    return $num1 + $num2;
  }
}
//减法 (策略二 策略具体实现,继承策略接口)
class MathSub implements MathOp{
  public function calculation($num1,$num2){
    return $num1 - $num2;
  }
}
//乘法 (策略三 策略具体实现,继承策略接口)
class MathMulti implements MathOp{
  public function calculation($num1,$num2){
    return $num1 * $num2;
  }
}
//除法 (策略四 策略具体实现,继承策略接口)
class MathDiv implements MathOp{
  public function calculation($num1,$num2){
    return $num1 / $num2;
  }
}
//环境角色  (调取某个策略就行计算,调用得看客户端按哪个键)
class Op{
  protected $op_class = null;
  public function __construct($op_type){
    $this->op_class = 'Math' . $op_type;
  }
  public function get_result($num1,$num2){
    $cls = new $this->op_class;
    return $cls->calculation($num1,$num2);
  }
}
//具体应用过程
$obj = new Op('Add');
echo $obj->get_result(6,2);  //8
echo "<br/>";
$obj = new Op('Sub');
echo $obj->get_result(6,5);  //1
echo "<br/>";
$obj = new Op('Multi');
echo $obj->get_result(6,2);  //12
echo "<br/>";
$obj = new Op('Div');
echo $obj->get_result(6,2);  //3

运行结果:

8
1
12
3

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
PHP iconv 函数转gb2312的bug解决方法
Oct 11 PHP
Ajax PHP 边学边练 之三 数据库
Nov 26 PHP
深入php 正则表达式的学习探讨
Jun 06 PHP
IIS+fastcgi下PHP运行超时问题的解决办法详解
Jun 20 PHP
PHP 线程安全与非线程安全版本的区别深入解析
Aug 06 PHP
限制ckeditor上传图片文件大小的方法
Nov 15 PHP
不使用php api函数实现数组的交换排序示例
Apr 13 PHP
laravel容器延迟加载以及auth扩展详解
Mar 02 PHP
php实现的美国50个州选择列表实例
Apr 20 PHP
php基于dom实现读取图书xml格式数据的方法
Feb 03 PHP
Thinkphp5框架实现图片、音频和视频文件的上传功能详解
Aug 27 PHP
PHP查找一列有序数组是否包含某值的方法
Feb 07 PHP
php策略模式简单示例分析【区别于工厂模式】
Sep 25 #PHP
PHP 观察者模式深入理解与应用分析
Sep 25 #PHP
php模式设计之观察者模式应用实例分析
Sep 25 #PHP
php创建类并调用的实例方法
Sep 25 #PHP
关于php开启错误提示的总结
Sep 24 #PHP
php集成开发环境详解
Sep 24 #PHP
php和nginx交互实例讲解
Sep 24 #PHP
You might like
php下intval()和(int)转换使用与区别
2008/07/18 PHP
PHP数组生成XML格式数据的封装类实例
2016/11/10 PHP
php面向对象之反射功能与用法分析
2017/03/29 PHP
PHP单例模式实例分析【防继承,防克隆操作】
2019/05/22 PHP
用JQuery实现表格隔行变色和突出显示当前行的代码
2012/02/10 Javascript
使用js检测浏览器的实现代码
2013/05/14 Javascript
跟我学习javascript的定时器
2015/11/19 Javascript
javascript类型系统 Array对象学习笔记
2016/01/09 Javascript
JS中对象与字符串的互相转换详解
2016/05/20 Javascript
jQuery中DOM节点删除之empty与remove
2017/01/20 Javascript
解析Vue2.0双向绑定实现原理
2017/02/23 Javascript
Vue-不允许嵌套式的渲染方法
2018/09/13 Javascript
vue 实现Web端的定位功能 获取经纬度
2019/08/08 Javascript
layui实现数据表格自定义数据项
2019/10/26 Javascript
jQuery+PHP+Ajax实现动态数字统计展示功能
2019/12/25 jQuery
[47:31]完美世界DOTA2联赛PWL S3 INK ICE vs DLG 第一场 12.12
2020/12/16 DOTA
Python中的urllib模块使用详解
2015/07/07 Python
Python爬虫实例_城市公交网络站点数据的爬取方法
2018/01/10 Python
20个常用Python运维库和模块
2018/02/12 Python
python微信跳一跳系列之棋子定位颜色识别
2018/02/26 Python
利用python为运维人员写一个监控脚本
2018/03/25 Python
python3+PyQt5实现柱状图
2018/04/24 Python
OpenCV HSV颜色识别及HSV基本颜色分量范围
2019/03/22 Python
解决webdriver.Chrome()报错:Message:'chromedriver' executable needs to be in Path
2019/06/12 Python
PyQt4实时显示文本内容GUI的示例
2019/06/14 Python
python 基于TCP协议的套接字编程详解
2019/06/29 Python
django 配置阿里云OSS存储media文件的例子
2019/08/20 Python
python中常用的数据结构介绍
2021/01/12 Python
纯css3实现的竖形无限级导航
2014/12/10 HTML / CSS
秘书行业自我鉴定范文
2013/12/30 职场文书
薪酬专员岗位职责
2014/02/18 职场文书
公司收款委托书范本
2014/09/20 职场文书
小学庆六一主持词
2015/06/30 职场文书
迎国庆主题班会
2015/08/17 职场文书
Tensorflow与RNN、双向LSTM等的踩坑记录及解决
2021/05/31 Python
React列表栏及购物车组件使用详解
2021/06/28 Javascript