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 错误之引号中使用变量
May 04 PHP
php 广告调用类代码(支持Flash调用)
Aug 11 PHP
php如何解决无法上传大于8M的文件问题
Mar 10 PHP
ThinkPHP3.1新特性之对分组支持的改进与完善概述
Jun 19 PHP
PHP curl实现抓取302跳转后页面的示例
Jul 04 PHP
php的curl封装类用法实例
Nov 07 PHP
PHP中使用file_get_contents抓取网页中文乱码问题解决方法
Dec 17 PHP
php结合curl实现多线程抓取
Jul 09 PHP
yii2.0实现创建简单widgets示例
Jul 18 PHP
PHP策略模式定义与用法示例
Jul 27 PHP
PHP面向对象程序设计之多态性的应用示例
Dec 19 PHP
PHP如何通过表单直接提交大文件详解
Jan 08 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
德生PL330的评价与改造
2021/03/02 无线电
PHP面向对象分析设计的61条军规小结
2010/07/17 PHP
Yii2 中实现单点登录的方法
2018/03/09 PHP
同一个表单 根据要求递交到不同页面的实现方法小结
2009/08/05 Javascript
原生js实现查找/添加/删除/指定元素的class
2013/04/12 Javascript
Microsfot .NET Framework4.0框架 安装失败的解决方法
2013/08/14 Javascript
JQuery给网页更换皮肤的方法
2015/05/30 Javascript
JavaScript声明变量名的语法规则
2015/07/10 Javascript
jquery实现select下拉框美化特效代码分享
2015/08/18 Javascript
jQuery实现的网页换肤效果示例
2016/09/20 Javascript
浅谈让你的代码更简短,更整洁,更易读的ES6小技巧
2018/10/25 Javascript
Vue项目打包部署到iis服务器的配置方法
2019/10/14 Javascript
vscode 配置vue+vetur+eslint+prettier自动格式化功能
2020/03/23 Javascript
Vue 防止短时间内连续点击后多次触发请求的操作
2020/11/11 Javascript
[01:38]DOTA2第二届亚洲邀请赛中国区预选赛出线战队晋级之路
2017/01/17 DOTA
Python基于回溯法子集树模板解决0-1背包问题实例
2017/09/02 Python
python脚本后台执行方式
2019/12/21 Python
Python搭建Keras CNN模型破解网站验证码的实现
2020/04/07 Python
Python3 ID3决策树判断申请贷款是否成功的实现代码
2020/05/21 Python
HTML5实现的震撼3D焦点图动画的示例代码
2019/09/26 HTML / CSS
举例详解HTML5中使用JSON格式提交表单
2015/06/16 HTML / CSS
特步官方商城:Xtep
2017/03/21 全球购物
Vans奥地利官方网站:美国原创极限运动潮牌
2018/09/30 全球购物
Booking.com缤客中国:全球酒店在线预订网站
2020/05/03 全球购物
酒店总经理职务说明书
2014/02/26 职场文书
新闻传媒系求职信范文
2014/04/19 职场文书
秋天的怀念教学反思
2014/04/28 职场文书
机械制造专业大学生自我鉴定
2014/09/19 职场文书
基层党员群众路线整改措施及努力方向
2014/10/28 职场文书
婚礼庆典答谢词
2015/01/20 职场文书
导游欢送词
2015/01/31 职场文书
创业计划书之健康营养产业
2019/10/15 职场文书
Python3 使用pip安装git并获取Yahoo金融数据的操作
2021/04/08 Python
Python数据分析入门之数据读取与存储
2021/05/13 Python
JavaScript数组reduce()方法的语法与实例解析
2021/07/07 Javascript
vue如何在data中引入图片的正确路径
2022/06/05 Vue.js