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
php数据库连接
Oct 09 PHP
计算一段日期内的周末天数的php代码(星期六,星期日总和)
Nov 12 PHP
《PHP编程最快明白》第四讲:日期、表单接收、session、cookie
Nov 01 PHP
php版微信公众平台之微信网页登陆授权示例
Sep 23 PHP
PHP 实现页面静态化的几种方法
Jul 23 PHP
PHP中的浅复制与深复制的实例详解
Oct 26 PHP
PHP实现的折半查找算法示例
Dec 19 PHP
PHP的RSA加密解密方法以及开发接口使用
Feb 11 PHP
Laravel框架Request、Response及Session操作示例
May 06 PHP
PHP+redis实现的限制抢购防止商品超发功能详解
Sep 19 PHP
PHP PDO和消息队列的个人理解与应用实例分析
Nov 25 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+APACHE实现用户论证的方法
2006/10/09 PHP
PHP安装BCMath扩展的方法
2019/02/13 PHP
CI框架简单分页类用法示例
2020/06/06 PHP
解决遍历时Array.indexOf产生的性能问题
2012/07/03 Javascript
javascript 手动给表增加数据的小例子
2013/07/10 Javascript
js判断选择时间不能小于当前时间的示例代码
2013/09/24 Javascript
3分钟写出来的Jquery版checkbox全选反选功能
2013/10/23 Javascript
JSONP跨域请求实例详解
2016/07/04 Javascript
AngularJS辅助库browserTrigger用法示例
2016/11/03 Javascript
js以分隔符分隔数组中的元素并转换为字符串的方法
2016/11/16 Javascript
浅谈javascript中的 “ &amp;&amp; ” 和 “ || ”
2017/02/02 Javascript
完美解决spring websocket自动断开连接再创建引发的问题
2017/03/02 Javascript
配置nodejs环境的方法
2017/05/13 NodeJs
AngularJS 中ui-view传参的实例详解
2017/08/25 Javascript
ng-alain表单使用方式详解
2018/07/10 Javascript
详解关于JSON.parse()和JSON.stringify()的性能小测试
2019/03/14 Javascript
了解在JavaScript中将值转换为字符串的5种方法
2019/06/06 Javascript
vue实现tab栏点击高亮效果
2020/08/19 Javascript
解决VUE项目使用Element-ui 下拉组件的验证失效问题
2020/11/07 Javascript
Vue在H5 项目中使用融云进行实时个人单聊通讯
2020/12/14 Vue.js
vue使用transition组件动画效果的实例代码
2021/01/28 Vue.js
python实现根据指定字符截取对应的行的内容方法
2018/10/23 Python
python实现布隆过滤器及原理解析
2019/12/08 Python
Django多进程滚动日志问题解决方案
2019/12/17 Python
Python xlrd excel文件操作代码实例
2020/03/10 Python
Python openpyxl模块实现excel读写操作
2020/06/30 Python
CSS3 icon font完全指南(CSS3 font 会取代icon图标)
2013/01/06 HTML / CSS
KIKO MILANO俄罗斯官网:意大利领先的化妆品和护肤品品牌
2021/01/09 全球购物
3D空间设计学生找工作的自我评价
2013/10/28 职场文书
军训的自我鉴定
2013/12/10 职场文书
文明礼仪伴我行演讲稿
2014/05/12 职场文书
企业活动策划方案
2014/06/02 职场文书
绿色出行口号
2014/06/18 职场文书
高校师德师风自我剖析材料
2014/09/29 职场文书
电影建党伟业观后感
2015/06/01 职场文书
生产设备维护保养制度
2015/08/06 职场文书