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程序之die调试法 快速解决错误
Sep 17 PHP
php生成的html meta和link标记在body标签里 顶部有个空行
May 18 PHP
PHP Cookie的使用教程详解
Jun 03 PHP
解析:使用php mongodb扩展时 需要注意的事项
Jun 18 PHP
php截取中文字符串不乱码的方法
Dec 25 PHP
destoon实现首页显示供应、企业、资讯条数的方法
Jul 15 PHP
php检查是否是ajax请求的方法
Apr 16 PHP
php计算整个mysql数据库大小的方法
Jun 19 PHP
PHP实现接收二进制流转换成图片的方法
Jan 10 PHP
php生成图片缩略图功能示例
Feb 22 PHP
MAC下通过改apache配置文件切换php多版本的方法
Apr 26 PHP
php设计模式之策略模式实例分析【星际争霸游戏案例】
Mar 26 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获取当前文件所在目录 getcwd()函数
2009/05/13 PHP
PHP,ASP.JAVA,JAVA代码格式化工具整理
2010/06/15 PHP
PHP命名空间(Namespace)简明教程
2014/06/11 PHP
PHP substr()函数参数解释及用法讲解
2017/11/23 PHP
Javascript 刷新全集常用代码
2009/11/22 Javascript
javascript 获取所有id中包含某关键字的控件的实现代码
2010/11/25 Javascript
javascript读取xml实现javascript分页
2013/12/13 Javascript
JavaScript代码编写中各种各样的坑和填坑方法
2014/06/06 Javascript
jQuery简单实现网页选项卡特效
2014/11/24 Javascript
js创建对象的方式总结
2015/01/10 Javascript
javascript转换静态图片,增加粒子动画效果
2015/05/28 Javascript
详解Vue.js入门环境搭建
2017/03/17 Javascript
基于vue.js快速搭建图书管理平台
2017/10/29 Javascript
React教程之封装一个Portal可复用组件的方法
2018/01/02 Javascript
vue中axios请求的封装实例代码
2019/03/23 Javascript
基于Vue实现的多条件筛选功能的详解(类似京东和淘宝功能)
2019/05/07 Javascript
js获取 gif 的帧数的代码实例
2019/09/10 Javascript
Flutter实现仿微信底部菜单栏功能
2019/09/18 Javascript
让IDE识别webpack的别名alias的实现方法
2020/05/06 Javascript
jquery实现淡入淡出轮播图效果
2020/12/13 jQuery
原生js实现自定义滚动条
2021/01/20 Javascript
[02:39]DOTA2英雄基础教程 极限穿梭编织者
2013/12/05 DOTA
简单的Python抓taobao图片爬虫
2014/10/26 Python
使用django的ORM框架按月统计近一年内的数据方法
2019/07/18 Python
python 实现视频 图像帧提取
2019/12/10 Python
Pyecharts 动态地图 geo()和map()的安装与用法详解
2020/03/25 Python
如何在vscode中安装python库的方法步骤
2021/01/06 Python
使用Html5多媒体实现微信语音功能
2019/07/26 HTML / CSS
中东地区最大的奢侈品市场:The Luxury Closet
2019/04/09 全球购物
网络编程中设计并发服务器,使用多进程与多线程,请问有什么区别?
2016/03/27 面试题
常见的软件开发流程有哪些
2015/11/14 面试题
七年级上册语文教学计划
2015/01/22 职场文书
2015年项目经理工作总结
2015/04/30 职场文书
适合毕业生创业的项目怎么找?
2019/08/08 职场文书
Python一些基本的图像操作和处理总结
2021/06/23 Python
Python常遇到的错误和异常
2021/11/02 Python