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 相关文章推荐
第三节 定义一个类 [3]
Oct 09 PHP
PHP静态新闻列表自动生成代码
Jun 14 PHP
PHPMYADMIN 简明安装教程 推荐
Mar 07 PHP
zf框架的校验器使用使用示例(自定义校验器和校验器链)
Mar 13 PHP
跟我学Laravel之快速入门
Oct 15 PHP
php实现Mongodb自定义方式生成自增ID的方法
Mar 23 PHP
php实现对两个数组进行减法操作的方法
Apr 17 PHP
PHP结合jQuery插件ajaxFileUpload实现异步上传文件实例
Aug 17 PHP
用HTML/JS/PHP方式实现页面延时跳转的简单实例
Jul 18 PHP
示例详解Laravel的注册重构
Aug 14 PHP
php批量删除操作(数据访问)
May 23 PHP
利用PHPStorm如何开发Laravel应用详解
Aug 30 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
一个用于网络的工具函数库
2006/10/09 PHP
php 接口类与抽象类的实际作用
2009/11/26 PHP
PHP+JS+rsa数据加密传输实现代码
2011/03/23 PHP
PHP 实现公历日期与农历日期的互转换
2017/09/13 PHP
jQuery实战之仿淘宝商城左侧导航效果
2011/04/12 Javascript
查找iframe里元素的方法可传参
2013/09/11 Javascript
原生javaScript实现图片延时加载的方法
2014/12/22 Javascript
使用javascript实现判断当前浏览器
2015/04/14 Javascript
js网页滚动条滚动事件实例分析
2015/05/05 Javascript
jQuery.each使用详解
2015/07/07 Javascript
JavaScript保留关键字汇总
2015/12/01 Javascript
JavaScript对Json的增删改属性详解
2016/06/02 Javascript
遍历js中对象的属性和值的实例
2016/11/21 Javascript
JS中对数组元素进行增删改移的方法总结
2016/12/15 Javascript
AngularJS打开页面隐藏显示表达式用法示例
2016/12/25 Javascript
Node.js利用断言模块assert进行单元测试的方法
2017/09/28 Javascript
javascript 代码是如何被压缩的示例代码
2020/05/06 Javascript
Python中使用支持向量机SVM实践
2017/12/27 Python
python中的随机函数小结
2018/01/27 Python
使用python获取电脑的磁盘信息方法
2018/11/01 Python
8种用Python实现线性回归的方法对比详解
2019/07/10 Python
django框架面向对象ORM模型继承用法实例分析
2019/07/29 Python
tensorflow使用freeze_graph.py将ckpt转为pb文件的方法
2020/04/22 Python
PySide2出现“ImportError: DLL load failed: 找不到指定的模块”的问题及解决方法
2020/06/10 Python
OpenCV 使用imread()函数读取图片的六种正确姿势
2020/07/09 Python
印尼太阳百货公司网站:Matahari
2018/02/04 全球购物
台湾SHOPRO购物行家:亚洲首创影视.3C.家电.优质购物平台
2018/05/07 全球购物
Python面试题:Python是如何进行内存管理的
2014/08/04 面试题
进步之星获奖感言
2014/02/22 职场文书
党组织公开承诺书
2014/03/29 职场文书
林肯就职演讲稿
2014/05/19 职场文书
合作合同协议书范本
2015/01/27 职场文书
医德医风自我评价2015
2015/03/03 职场文书
家长会主持词开场白
2015/05/29 职场文书
用 Python 定义 Schema 并生成 Parquet 文件详情
2021/09/25 Python
python基础之模块的导入
2021/10/24 Python