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一些有意思的小区别
Dec 06 PHP
PHP 编程安全性小结
Jan 08 PHP
PHP文件上传原理简单分析
May 29 PHP
php jq jquery getJSON跨域提交数据完整版
Sep 13 PHP
wamp安装后自定义配置的方法
Aug 23 PHP
PHP防盗链代码实例
Aug 27 PHP
php实现发送微信模板消息的方法
Mar 07 PHP
php采集中国代理服务器网的方法
Jun 16 PHP
php实现计算百度地图坐标之间距离的方法
May 05 PHP
php使用json_decode后数字对象转换成了科学计数法的解决方法
Feb 20 PHP
Laravel框架路由管理简单示例
May 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连接MYSQL成功与否的代码
2013/08/16 PHP
PHP语法自动检查的Vim插件
2014/08/11 PHP
从零开始学YII2框架(五)快速生成代码工具 Gii 的使用
2014/08/20 PHP
php绘制一条弧线的方法
2015/01/24 PHP
php邮箱地址正则表达式验证
2015/11/13 PHP
Python中使用django form表单验证的方法
2017/01/16 PHP
php在linux环境中如何使用redis详解
2020/12/15 PHP
splice slice区别
2006/10/09 Javascript
使用IE的地址栏来辅助调试Web页脚本
2007/03/08 Javascript
window.onload 加载完毕的问题及解决方案(下)
2009/07/09 Javascript
javascript定义函数的方法
2010/12/06 Javascript
JavaScript中OnLoad几种使用方法
2012/12/15 Javascript
js创建子窗口并且回传值示例代码
2013/07/02 Javascript
Jquery对数组的操作技巧整理
2014/03/25 Javascript
js淡入淡出的图片轮播效果代码分享
2015/08/24 Javascript
JavaScript与HTML的结合方法详解
2015/11/23 Javascript
JavaScript 七大技巧(一)
2015/12/13 Javascript
Vue-cli 使用json server在本地模拟请求数据的示例代码
2017/11/02 Javascript
Node.js静态服务器的实现方法
2018/02/28 Javascript
Vue 实现双向绑定的四种方法
2018/03/16 Javascript
使用淘宝镜像cnpm安装Vue.js的图文教程
2018/05/17 Javascript
angularJS开发注意事项
2018/05/26 Javascript
JavaScript数组去重的几种方法
2019/04/07 Javascript
JavaScript常用内置对象用法分析
2019/07/09 Javascript
JS实现秒杀倒计时特效
2020/01/02 Javascript
Vue.js中Line第三方登录api的实现代码
2020/06/29 Javascript
微信小程序picker组件两列关联使用方式
2020/10/27 Javascript
[02:26]DOTA2英雄米拉娜基础教程
2013/11/25 DOTA
[10:34]DOTA2上海特级锦标赛全纪录
2016/03/25 DOTA
Python中的ceil()方法使用教程
2015/05/14 Python
Sephora丝芙兰泰国官方网站:国际知名化妆品购物
2017/11/15 全球购物
应届生人事助理求职信
2013/11/09 职场文书
群众路线党员个人剖析材料
2014/10/08 职场文书
大学生求职自荐信范文
2015/03/04 职场文书
单位收入证明范本
2015/06/18 职场文书
Pytorch 统计模型参数量的操作 param.numel()
2021/05/13 Python