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面向对象分析设计的经验原则
Sep 20 PHP
PHP采集相关教程之一 CURL函数库
Feb 15 PHP
PHP获取MAC地址的函数代码
Sep 11 PHP
浅析Mysql 数据回滚错误的解决方法
Aug 05 PHP
帝国cms目录结构分享
Jul 06 PHP
php支持断点续传、分块下载的类
May 02 PHP
PHP中加速、缓存扩展的区别和作用详解(eAccelerator、memcached、xcache、APC )
Jul 09 PHP
php操纵mysqli数据库的实现方法
Sep 18 PHP
如何判断php mysqli扩展类是否开启
Dec 24 PHP
PHP生成图片验证码功能示例
Jan 12 PHP
OAuth认证协议中的HMACSHA1加密算法(实例)
Oct 25 PHP
php-7.3.6 编译安装过程
Feb 11 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
为了这两部电子管收音机,买了6套全新电子管和10粒刻度盘灯泡
2021/03/02 无线电
用PHP制作静态网站的模板框架
2006/10/09 PHP
php读取目录及子目录下所有文件名的方法
2014/10/20 PHP
php函数实现判断是否移动端访问
2015/03/03 PHP
Zend Framework教程之Zend_Layout布局助手详解
2016/03/04 PHP
PHP7匿名类用法分析
2016/09/26 PHP
ThinkPHP 模板引擎使用详解
2017/05/07 PHP
js写的评论分页(还不错)
2013/12/23 Javascript
ionic 自定义弹框效果
2017/06/27 Javascript
NodeJS收发GET和POST请求的示例代码
2017/08/25 NodeJs
Vue2.0设置全局样式(less/sass和css)
2017/11/18 Javascript
vue 实现的树形菜的实例代码
2018/03/19 Javascript
vue单页缓存存在的问题及解决方案(小结)
2018/09/25 Javascript
Three.js中矩阵和向量的使用教程
2019/03/19 Javascript
vue 中 elment-ui table合并上下两行相同数据单元格
2019/12/26 Javascript
vue自定义组件实现双向绑定
2021/01/13 Vue.js
Python多进程同步Lock、Semaphore、Event实例
2014/11/21 Python
详解Python中用于计算指数的exp()方法
2015/05/14 Python
Python实现控制台输入密码的方法
2015/05/29 Python
Python中的Descriptor描述符学习教程
2016/06/02 Python
Python实现的txt文件去重功能示例
2018/07/07 Python
详解通过API管理或定制开发ECS实例
2018/09/30 Python
python实现字符串加密成纯数字
2019/03/19 Python
在python中实现调用可执行文件.exe的3种方法
2019/07/07 Python
python随机数分布random均匀分布实例
2019/11/27 Python
Python读取分割压缩TXT文本文件实例
2020/02/14 Python
在Ubuntu中安装并配置Pycharm教程的实现方法
2021/01/06 Python
凯特王妃父母建立的派对用品网站:Party Pieces
2017/05/28 全球购物
英国排名第一的在线宠物用品商店:Monster Pet Supplies
2018/05/20 全球购物
如何进行Linux分区优化
2013/02/12 面试题
大三毕业自我鉴定
2014/01/15 职场文书
助人为乐好少年事迹材料
2014/08/18 职场文书
2014幼儿园教师个人工作总结
2014/11/08 职场文书
图解上海144收音机
2021/04/22 无线电
如何设计高效合理的MySQL查询语句
2021/05/26 MySQL
教你使用Python获取QQ音乐某个歌手的歌单
2022/04/03 Python