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 相关文章推荐
cache_lite试用
Feb 14 PHP
PHP ajax 分页类代码
Nov 13 PHP
用Zend Encode编写开发PHP程序
Feb 21 PHP
PHP易混淆函数的区别及用法汇总
Nov 22 PHP
PHP中is_file()函数使用指南
May 08 PHP
PHP根据图片色界在不同位置加水印的方法
Jul 01 PHP
php实现点击可刷新验证码
Nov 07 PHP
php截取视频指定帧为图片
May 16 PHP
PHP 用session与gd库实现简单验证码生成与验证的类方法
Nov 15 PHP
关于ThinkPhp 框架表单验证及ajax验证问题
Jul 19 PHP
PHP实现的redis主从数据库状态检测功能示例
Jul 20 PHP
如何运行/调试你的PHP代码
Oct 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生成Flash动画的实现代码
2010/03/12 PHP
PHP程序漏洞产生的原因分析与防范方法说明
2014/03/06 PHP
PHP实现利用MySQL保存session的方法
2014/08/23 PHP
php和html的区别点详细总结
2019/09/24 PHP
一个很酷的拖动层的js类,兼容IE及Firefox
2009/06/23 Javascript
Javascript中的相等与不等运算
2010/04/25 Javascript
基于Jquery的文字自动截取(提供源代码)
2011/08/09 Javascript
Javascript实现图片轮播效果(二)图片序列节点的控制实现
2016/02/17 Javascript
使用jQuery实现鼠标点击左右按钮滑动切换
2017/08/04 jQuery
vue awesome swiper异步加载数据出现的bug问题
2018/07/03 Javascript
JS pushlet XMLAdapter适配器用法案例解析
2020/10/16 Javascript
解决antd 表单设置默认值initialValue后验证失效的问题
2020/11/02 Javascript
跟老齐学Python之Import 模块
2014/10/13 Python
简单介绍Python中的filter和lambda函数的使用
2015/04/07 Python
Django中模型Model添加JSON类型字段的方法
2015/06/17 Python
Python实现短网址ShortUrl的Hash运算实例讲解
2015/08/10 Python
Python设计模式之适配器模式原理与用法详解
2019/01/15 Python
django中间键重定向实例方法
2019/11/10 Python
Python实现查找数据库最接近的数据
2020/06/08 Python
Python使用socketServer包搭建简易服务器过程详解
2020/06/12 Python
HTML5制作酷炫音频播放器插件图文教程
2014/12/30 HTML / CSS
百丽国际旗下购物网站:优购
2017/02/28 全球购物
爱淘宝:淘宝网购物分享平台
2017/04/28 全球购物
全球销量第一生发产品:Viviscal
2017/12/21 全球购物
JVM是一个编译程序还是解释程序
2012/09/11 面试题
办公室主任岗位职责
2013/11/08 职场文书
请假条格式范文
2014/04/10 职场文书
父母寄语大全
2014/04/12 职场文书
C++程序员求职信范文
2014/04/14 职场文书
2014年仓库保管员工作总结
2014/12/03 职场文书
2014年学校体育工作总结
2014/12/08 职场文书
导游词之上海豫园
2019/10/24 职场文书
python - asyncio异步编程
2021/04/06 Python
python的列表生成式,生成器和generator对象你了解吗
2022/03/16 Python
你知道Java Spring的两种事务吗
2022/03/16 Java/Android
Python实现视频自动打码的示例代码
2022/04/08 Python