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脚本数据库功能详解(中)
Oct 09 PHP
给apache2.2加上mod_encoding模块後 php5.2.0 处理url出现bug
Apr 12 PHP
PHP游戏编程25个脚本代码
Feb 08 PHP
php按百分比生成缩略图的代码分享
May 10 PHP
php中fsockopen用法实例
Jan 05 PHP
浅析THINKPHP的addAll支持的最大数据量
Feb 03 PHP
PHP连接操作access数据库实例
Mar 30 PHP
php验证手机号码
Nov 11 PHP
PHP读取mssql json数据中文乱码的解决办法
Apr 11 PHP
PHP实现加密文本文件并限制特定页面的存取的效果
Oct 21 PHP
php lcg_value与mt_rand生成0~1随机小数的效果对比分析
Apr 05 PHP
php实现文件预览功能
May 23 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实现utf-8和GB2312编码相互转换函数代码
2013/02/07 PHP
PHP扩展迁移为PHP7扩展兼容性问题记录
2016/02/15 PHP
PHP中PDO连接数据库中各种DNS设置方法小结
2016/05/13 PHP
php传值和传引用的区别点总结
2019/11/19 PHP
javascript iframe中打开文件,并检测iframe存在否
2008/12/28 Javascript
基于jquery的3d效果实现代码
2011/03/23 Javascript
如何设置iframe高度自适应在跨域情况下的可用方法
2013/09/06 Javascript
Javascript基础教程之if条件语句
2015/01/18 Javascript
jQuery+ajax实现动态执行脚本的方法
2015/01/27 Javascript
javascript查询字符串参数的方法
2015/01/28 Javascript
javascript中indexOf技术详解
2015/05/07 Javascript
网页瀑布流布局jQuery实现代码
2016/10/21 Javascript
JS实现搜索关键词的智能提示功能
2017/07/07 Javascript
阿里大于短信验证码node koa2的实现代码(最新)
2017/09/07 Javascript
vuex + axios 做登录验证 并且保存登录状态的实例
2018/09/16 Javascript
vue 中Virtual Dom被创建的方法
2019/04/15 Javascript
小程序自定义模板实现吸顶功能
2020/01/08 Javascript
使用Typescript和ES模块发布Node模块的方法
2020/05/25 Javascript
vue 内联样式style中的background用法说明
2020/08/05 Javascript
[51:11]2014 DOTA2国际邀请赛中国区预选赛5.21 LGD-CDEC VS DT
2014/05/22 DOTA
Python的Django框架使用入门指引
2015/04/15 Python
Windows安装Python、pip、easy_install的方法
2017/03/05 Python
python制作mysql数据迁移脚本
2019/01/01 Python
pyspark给dataframe增加新的一列的实现示例
2020/04/24 Python
Python + opencv对拍照得到的图片进行背景去除的实现方法
2020/11/18 Python
CSS3教程:边框属性border的极致应用
2009/04/02 HTML / CSS
求职个人评价范文
2014/04/09 职场文书
社区优秀志愿者先进事迹
2014/05/09 职场文书
文明之星事迹材料
2014/05/09 职场文书
银行领导班子四风对照检查材料
2014/09/27 职场文书
2014工程部年度工作总结
2014/12/17 职场文书
三方协议书
2015/01/27 职场文书
党员个人总结自评
2015/02/14 职场文书
智慧人生:永远不需要向任何人解释你自己
2019/08/20 职场文书
Pytorch 使用tensor特定条件判断索引
2021/04/08 Python
springboot为异步任务规划自定义线程池的实现
2022/06/14 Java/Android