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 相关文章推荐
linux下 C语言对 php 扩展
Dec 14 PHP
PHP中把stdClass Object转array的几个方法
May 08 PHP
自定义session存储机制避免会话保持问题
Oct 08 PHP
windows7下php开发环境搭建图文教程
Jan 06 PHP
PHP实现股票趋势图和柱形图
Feb 07 PHP
php实现上传图片保存到数据库的方法
Feb 11 PHP
php实现的通用图片处理类
Mar 24 PHP
WordPress中设置Post Type自定义文章类型的实例教程
May 10 PHP
PHP实现的简单适配器模式示例
Jun 22 PHP
Redis在Laravel项目中的应用实例详解
Aug 11 PHP
thinkPHP5框架自定义验证器实现方法分析
Jun 11 PHP
Mac下快速搭建PHP开发环境步骤详解
May 05 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之APC缓存详细介绍 apc模块安装
2014/01/13 PHP
Thinkphp框架中D方法与M方法的区别
2016/12/23 PHP
PHP基于curl post实现发送url及相关中文乱码问题解决方法
2017/11/25 PHP
Laravel实现短信注册的示例代码
2018/05/29 PHP
JavaScript中void(0)的具体含义解释
2007/02/27 Javascript
动态添加js事件实现代码
2009/03/12 Javascript
jQuery的end()方法使用详解
2015/07/15 Javascript
学习JavaScript设计模式(多态)
2015/11/25 Javascript
javascript事件模型介绍
2016/05/31 Javascript
jQuery 实现ajax传入参数含有特殊字符的方法总结
2016/10/17 Javascript
js 实现一些跨浏览器的事件方法详解及实例
2016/10/27 Javascript
解决bootstrap中使用modal加载kindeditor时弹出层文本框不能输入的问题
2017/06/05 Javascript
JavaScript基于扩展String实现替换字符串中index处字符的方法
2017/06/13 Javascript
vue实现一个获取按键展示快捷键效果的Input组件
2021/01/13 Vue.js
Python爬虫中urllib库的进阶学习
2018/01/05 Python
pandas的object对象转时间对象的方法
2018/04/11 Python
对Python 3.5拼接列表的新语法详解
2018/11/08 Python
将python运行结果保存至本地文件中的示例讲解
2019/07/11 Python
Python如何筛选序列中的元素的方法实现
2019/07/15 Python
Tornado实现多进程/多线程的HTTP服务详解
2019/07/25 Python
Python学习笔记之集合的概念和简单使用示例
2019/08/22 Python
Python TCP通信客户端服务端代码实例
2019/11/21 Python
Python自动重新加载模块详解(autoreload module)
2020/04/01 Python
keras实现多种分类网络的方式
2020/06/11 Python
css3与html5实现响应式导航菜单(导航栏)效果分享
2014/02/12 HTML / CSS
CSS3中的display:grid,网格布局介绍
2019/10/30 HTML / CSS
大韩航空官方网站:Korean Air
2017/10/25 全球购物
标签和贴纸印刷:Lightning Labels
2018/03/22 全球购物
英国现代、当代和设计师家具店:Furntastic
2020/07/18 全球购物
金融专业应届生求职信
2013/11/02 职场文书
幼儿园安全责任书
2014/04/14 职场文书
寝室长工作失责检讨书
2014/10/06 职场文书
道歉情书大全
2015/05/12 职场文书
使用vue-element-admin框架从后端动态获取菜单功能的实现
2021/04/29 Vue.js
python调试工具Birdseye的使用教程
2021/05/25 Python
如何使用Tkinter进行窗口的管理与设置
2021/06/30 Python