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 相关文章推荐
我的论坛源代码(五)
Oct 09 PHP
PHP一些常用的正则表达式字符的一些转换
Jul 29 PHP
fleaphp rolesNameField bug解决方法
Apr 23 PHP
PHP中获取内网用户MAC地址(WINDOWS/linux)的实现代码
Aug 11 PHP
php实现telnet功能示例
Apr 08 PHP
PHP操作文件的一些基本函数使用示例
Nov 18 PHP
详解php设置session(过期、失效、有效期)
Nov 12 PHP
人脸识别测颜值、测脸龄、测相似度微信接口
Apr 07 PHP
php实现购物车产品删除功能(2)
Jul 23 PHP
PHP实现的文件上传类与用法详解
Jul 05 PHP
thinkPHP5.1框架使用SemanticUI实现分页功能示例
Aug 03 PHP
php 获取音视频时长,PHP 利用getid3 获取音频文件时长等数据
Apr 01 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
Zend引擎的发展 [15]
2006/10/09 PHP
PHP5中的时间相差8小时的解决办法
2008/03/28 PHP
php GD绘制24小时柱状图
2008/06/28 PHP
php foreach、while性能比较
2009/10/15 PHP
Base64在线编码解码实现代码 演示与下载
2011/01/08 PHP
php实现递归的三种基本方式
2020/07/04 PHP
PHP MYSQL简易交互式站点开发
2016/12/27 PHP
PHPExcel 修改已存在Excel的方法
2018/05/03 PHP
NiftyCube——轻松实现圆角边框
2007/02/20 Javascript
JavaScript中的排序算法代码
2011/02/22 Javascript
javascript仿qq界面的折叠菜单实现代码
2012/12/12 Javascript
jquery利用ajax调用后台方法实例
2013/08/23 Javascript
jQuery Ajax 异步加载显示等待效果代码分享
2016/08/01 Javascript
轻松掌握JavaScript单例模式
2016/08/25 Javascript
详解Javascript函数声明与递归调用
2016/10/22 Javascript
jQuery时间日期三级联动(推荐)
2016/11/27 Javascript
Javascript之面向对象--封装
2016/12/02 Javascript
详解Jquery EasyUI tree 的异步加载(遍历指定文件夹,根据文件夹内的文件生成tree)
2017/02/11 Javascript
微信小程序tabBar底部导航中文注解api详解
2017/08/16 Javascript
JS实现定时任务每隔N秒请求后台setInterval定时和ajax请求问题
2017/10/15 Javascript
Vue简单封装axios之解决post请求后端接收不到参数问题
2020/02/16 Javascript
python实现将元祖转换成数组的方法
2015/05/04 Python
python将一组数分成每3个一组的实例
2018/11/14 Python
python文件排序的方法总结
2020/09/13 Python
解决HTML5中滚动到底部的事件问题
2019/08/22 HTML / CSS
收银员的岗位职责范本
2014/02/04 职场文书
学习型家庭事迹材料
2014/12/20 职场文书
无房证明样本
2015/06/17 职场文书
志愿服务心得体会
2016/01/15 职场文书
python之np.argmax()及对axis=0或者1的理解
2021/06/02 Python
Python Pandas模块实现数据的统计分析的方法
2021/06/24 Python
总结Java对象被序列化的两种方法
2021/06/30 Java/Android
Pytest中skip和skipif的具体使用方法
2021/06/30 Python
Mysql中where与on的区别及何时使用详析
2021/08/04 MySQL
SQL Server中的逻辑函数介绍
2022/05/25 SQL Server
Python可视化神器pyecharts之绘制地理图表练习
2022/07/07 Python