PHP实现的策略模式简单示例


Posted in PHP onAugust 25, 2017

本文实例讲述了PHP实现的策略模式。分享给大家供大家参考,具体如下:

比如说购物车系统,在给商品计算总价的时候,普通会员肯定是商品单价乘以数量,但是对中级会员提供8者折扣,对高级会员提供7折折扣,这种场景就可以使用策略模式实现:

<?php
/**
 * 策略模式实例
 *
 */
//抽象策略角色《为接口或者抽象类,给具体策略类继承》
interface Strategy
{
  public function computePrice($price);
}
//具体策略角色-普通会员策略类
class GenernalMember implements Strategy
{
  public function computePrice($price)
  {
    return $price;
  }
}
//具体策略角色-中级会员策略类
class MiddleMember implements Strategy
{
  public function computePrice($price)
  {
    return $price * 0.8;
  }
}
//具体策略角色-高级会员策略类
class HignMember implements Strategy
{
  public function computePrice($price)
  {
    return $price * 0.7;
  }
}
//环境角色实现类
class Price
{
  //具体策略对象
  private $strategyInstance;
  //构造函数
  public function __construct($instance)
  {
    $this->strategyInstance = $instance;
  }
  public function compute($price)
  {
    return $this->strategyInstance->computePrice($price);
  }
}
//客户端使用
$p = new Price(new HignMember());
$totalPrice = $p->compute(100);
echo $totalPrice; //70
?>

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
用文本作数据处理
Oct 09 PHP
php Http_Template_IT类库进行模板替换
Mar 19 PHP
PHP中获取内网用户MAC地址(WINDOWS/linux)的实现代码
Aug 11 PHP
Codeigniter购物车类不能添加中文的解决方法
Nov 29 PHP
codeigniter中实现一次性加载多个view的方法
Mar 20 PHP
php中preg_match的isU代表什么意思
Oct 01 PHP
php+js实现百度地图多点标注的方法
Nov 30 PHP
Laravel中log无法写入问题的解决
Jun 17 PHP
Laravel中前端js上传图片到七牛云的示例代码
Sep 04 PHP
PHP-FPM的配置与优化讲解
Mar 15 PHP
PHP判断是否微信访问的方法示例
Mar 27 PHP
ThinkPHP3.2框架操作Redis的方法分析
May 05 PHP
php实现简单的权限管理的示例代码
Aug 25 #PHP
thinkphp 抓取网站的内容并且保存到本地的实例详解
Aug 25 #PHP
Laravel中前端js上传图片到七牛云的示例代码
Sep 04 #PHP
使用YII2框架实现微信公众号中表单提交功能
Sep 04 #PHP
PHP实现批量重命名某个文件夹下所有文件的方法
Sep 04 #PHP
PHP读取、解析eml文件及生成网页的方法示例
Sep 04 #PHP
PHP钩子与简单分发方式实例分析
Sep 04 #PHP
You might like
php懒人函数 自动添加数据
2011/06/28 PHP
关于PHP二进制流 逐bit的低位在前算法(详解)
2013/06/13 PHP
CodeIgniter钩子用法实例详解
2016/01/20 PHP
PHP代码覆盖率统计详解
2020/07/22 PHP
使用JS操作页面表格,元素的一些技巧
2007/02/02 Javascript
使用prototype.js进行异步操作
2007/02/07 Javascript
用javascript实现兼容IE7的类库 IE7_0_9.zip提供下载
2007/08/08 Javascript
最近项目写了一些js,水平有待提高
2009/01/31 Javascript
JavaScript入门教程(3) js面向对象
2009/01/31 Javascript
Node.js中使用事件发射器模式实现事件绑定详解
2014/08/15 Javascript
微信小程序 详解页面跳转与返回并回传数据
2017/02/13 Javascript
详解node单线程实现高并发原理与node异步I/O
2017/09/21 Javascript
对mac下nodejs 更新到最新版本的最新方法(推荐)
2018/05/17 NodeJs
JavaScript实现浅拷贝与深拷贝的方法分析
2018/07/05 Javascript
JQuery判断radio单选框是否选中并获取值的方法
2019/01/17 jQuery
ES6 Object属性新的写法实例小结
2019/06/25 Javascript
vue router动态路由设置参数可选问题
2019/08/21 Javascript
vue实现点击追加选中样式效果
2019/11/01 Javascript
微信小程序点击顶部导航栏切换样式代码实例
2019/11/12 Javascript
在Python下使用Txt2Html实现网页过滤代理的教程
2015/04/11 Python
Python编程中装饰器的使用示例解析
2016/06/20 Python
TF-IDF算法解析与Python实现方法详解
2017/11/16 Python
Python实现的桶排序算法示例
2017/11/29 Python
python中的迭代和可迭代对象代码示例
2017/12/27 Python
python让列表倒序输出的实例
2018/06/25 Python
python使用BeautifulSoup与正则表达式爬取时光网不同地区top100电影并对比
2019/04/15 Python
Python将文字转成语音并读出来的实例详解
2019/07/15 Python
Keras设定GPU使用内存大小方式(Tensorflow backend)
2020/05/22 Python
HTML5之web workers_动力节点Java学院整理
2017/07/17 HTML / CSS
什么是接口(Interface)?
2013/02/01 面试题
解释一下ruby中的特殊方法与特殊类
2013/02/26 面试题
《彩色世界》教学反思
2014/04/12 职场文书
2015年学校教科室工作总结
2015/07/20 职场文书
导游词之铁岭象牙山
2019/12/06 职场文书
几款流行的HTML5 UI框架比较(小结)
2021/04/08 HTML / CSS
关于Vue Router的10条高级技巧总结
2021/05/06 Vue.js