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 相关文章推荐
Apache2 httpd.conf 中文版
Dec 06 PHP
PHP中cookies使用指南
Mar 16 PHP
apache rewrite_module模块使用教程
Jan 10 PHP
php 调试利器debug_print_backtrace()
Jul 23 PHP
PHP判断一个字符串是否是回文字符串的方法
Mar 23 PHP
php+mysql实现的二级联动菜单效果详解
May 10 PHP
PHP 的比较运算与逻辑运算详解
May 12 PHP
php基于闭包实现函数的自调用(递归)实例分析
Nov 11 PHP
PHP实现的mysql主从数据库状态检测功能示例
Jul 20 PHP
Smarty缓存机制实例详解【三种缓存方式】
Jul 20 PHP
php使用pthreads v3多线程实现抓取新浪新闻信息操作示例
Feb 21 PHP
基于PHP实现解密或加密Cloudflar邮箱保护
Jun 24 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
详解:――如何将图片储存在数据库里
2006/12/05 PHP
ThinkPHP CURD方法之field方法详解
2014/06/18 PHP
PHP采集静态页面并把页面css,img,js保存的方法
2014/12/23 PHP
PHP判断网络文件是否存在的方法
2015/03/12 PHP
PHP curl模拟登录带验证码的网站
2015/11/30 PHP
js原生appendChild的bug解决心得分享
2013/07/01 Javascript
禁用页面部分JavaScript方法的具体实现
2013/07/31 Javascript
纯javascript实现简单下拉刷新功能
2015/03/13 Javascript
Js实现自定义右键行为
2015/03/26 Javascript
浅谈JavaScript的全局变量与局部变量
2016/06/10 Javascript
CentOS 安装NodeJS V8.0.0的方法
2017/06/15 NodeJs
angular+ionic返回上一页并刷新页面
2017/08/08 Javascript
JavaScript折半查找(二分查找)算法原理与实现方法示例
2018/08/06 Javascript
Vue中使用wangeditor富文本编辑的问题
2021/02/07 Vue.js
浅析python的优势和不足之处
2018/11/20 Python
详解pandas DataFrame的查询方法(loc,iloc,at,iat,ix的用法和区别)
2019/08/02 Python
Mac安装python3的方法步骤
2019/08/09 Python
Django中自定义模型管理器(Manager)及方法
2019/09/23 Python
python numpy之np.random的随机数函数使用介绍
2019/10/06 Python
在python中创建指定大小的多维数组方式
2019/11/28 Python
浅谈keras通过model.fit_generator训练模型(节省内存)
2020/06/17 Python
Django celery异步任务实现代码示例
2020/11/26 Python
css3 实现滚动条美化效果的实例代码
2021/01/06 HTML / CSS
Nike瑞典官方网站:Nike.com (SE)
2018/11/26 全球购物
女性时尚网购:Chic Me
2019/07/30 全球购物
银行简历自我评价
2014/02/11 职场文书
乡镇综治宣传月活动总结
2014/07/02 职场文书
远程培训的心得体会
2014/09/01 职场文书
办理信用卡工作证明
2014/09/30 职场文书
领导干部作风整顿剖析材料
2014/10/11 职场文书
信用卡工资证明范本
2014/10/17 职场文书
离开雷锋的日子观后感
2015/06/09 职场文书
高中运动会前导词
2015/07/20 职场文书
RestTemplate如何通过HTTP Basic Auth认证示例说明
2022/03/17 Java/Android
Smart 2 车辆代号 HC11 全新谍照曝光
2022/04/21 数码科技
Win11右下角图标点了没反应怎么办?Win11点击右下角图标无反应解决方法汇总
2022/07/07 数码科技