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中Cannot send session cache limiter 的问题的方法
Apr 27 PHP
php下使用strpos需要注意 === 运算符
Jul 17 PHP
PHP下对字符串的递增运算代码
Aug 21 PHP
php array_walk() 数组函数
Jul 12 PHP
PHP利用str_replace防注入的方法
Nov 10 PHP
php缩小png图片不损失透明色的解决方法
Dec 25 PHP
php二分查找二种实现示例
Mar 12 PHP
常见php数据文件缓存类汇总
Dec 05 PHP
PHP实现通过URL提取根域名
Mar 31 PHP
WAF的正确bypass
Jan 05 PHP
PHP实现Unicode编码相互转换的方法示例
Nov 17 PHP
php使用pecl方式安装扩展操作示例
Aug 12 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文件夹的创建与删除方法
2015/01/24 PHP
支持png透明图片的php生成缩略图类分享
2015/02/08 PHP
PHP实现中文圆形印章特效
2015/06/19 PHP
laravel 解决后端无法获取到前端Post过来的值问题
2019/10/22 PHP
javascript document.compatMode兼容性
2010/02/23 Javascript
jquery 操作iframe的几种方法总结
2013/12/13 Javascript
BootStrap学习系列之Bootstrap Typeahead 组件实现百度下拉效果(续)
2016/07/07 Javascript
js 定位到某个锚点的方法
2016/11/19 Javascript
jQuery实现监听下拉框选中内容发生改变操作示例
2018/07/13 jQuery
Vue配合iView实现省市二级联动的示例代码
2018/07/27 Javascript
JavaScript ES6常用基础知识总结
2019/02/09 Javascript
Vue v-for循环之@click点击事件获取元素示例
2019/11/09 Javascript
JS数组Reduce方法功能与用法实例详解
2020/04/29 Javascript
java直接调用python脚本的例子
2014/02/16 Python
Python的ORM框架SQLAlchemy入门教程
2014/04/28 Python
Python操作MySQL简单实现方法
2015/01/26 Python
python如何压缩新文件到已有ZIP文件
2018/03/14 Python
Python集中化管理平台Ansible介绍与YAML简介
2019/06/12 Python
python3.6生成器yield用法实例分析
2019/08/23 Python
Python3爬虫发送请求的知识点实例
2020/07/30 Python
Python求区间正整数内所有素数之和的方法实例
2020/10/13 Python
DKNY品牌官网:纽约大都会时尚风格
2016/10/20 全球购物
Hunkemöller西班牙:欧洲最大的内衣连锁店
2018/08/15 全球购物
Lululemon英国官网:加拿大瑜伽服装品牌
2019/01/14 全球购物
C#可否对内存进行直接的操作
2015/02/26 面试题
三个Unix的命令面试题
2015/04/12 面试题
2014年元旦感言
2014/03/06 职场文书
纠风工作实施方案
2014/03/15 职场文书
企业授权委托书范本
2014/04/02 职场文书
实习班主任自我评价
2015/03/11 职场文书
学校光盘行动倡议书
2015/04/28 职场文书
终止解除劳动合同证明书
2015/06/17 职场文书
教师节校长致辞
2015/07/31 职场文书
2019个人半年工作总结
2019/06/21 职场文书
CSS filter 有什么神奇用途
2021/05/25 HTML / CSS
pytorch 如何使用batch训练lstm网络
2021/05/28 Python