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 相关文章推荐
PHP4实际应用经验篇(1)
Oct 09 PHP
php5.2时间相差8小时
Jan 15 PHP
优化使用mysql存储session的php代码
Jan 10 PHP
AMFPHP php远程调用(RPC, Remote Procedure Call)工具 快速入门教程
May 10 PHP
php checkbox 取值详细说明
Aug 19 PHP
PHP5中虚函数的实现方法分享
Apr 20 PHP
使用JSON实现数据的跨域传输的php代码
Dec 20 PHP
PHP Curl多线程原理实例详解
Nov 06 PHP
php 过滤英文标点符号及过滤中文标点符号代码
Jun 12 PHP
详解PHP的Yii框架的运行机制及其路由功能
Mar 17 PHP
php array_key_exists() 与 isset() 的区别
Oct 24 PHP
PHP中phar包的使用教程
Jun 14 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 explode函数实例代码
2012/02/27 PHP
Apache服务器下防止图片盗链的办法
2015/07/06 PHP
yii2.0使用Plupload实现带缩放功能的多图上传
2015/12/22 PHP
PHP中ltrim与rtrim去除左右空格及特殊字符实例
2016/01/07 PHP
CodeIgniter开发实现支付宝接口调用的方法示例
2016/11/14 PHP
JS类中定义原型方法的两种实现的区别
2007/03/08 Javascript
JS 继承实例分析
2008/11/04 Javascript
IE JS无提示关闭窗口不提示的方法
2010/04/29 Javascript
javascript跨域的4种方法和原理详解
2014/04/08 Javascript
setTimeout内不支持jquery的选择器的解决方案
2015/04/28 Javascript
JavaScript中使用Math.PI圆周率属性的方法
2015/06/14 Javascript
cocos2dx骨骼动画Armature源码剖析(一)
2015/09/08 Javascript
JS实现光滑展开合拢的菜单效果代码
2015/09/16 Javascript
jQuery插件FusionCharts绘制的2D双面积图效果示例【附demo源码】
2017/04/11 jQuery
React-Native做一个文本输入框组件的实现代码
2017/08/10 Javascript
bootstrap confirmation按钮提示组件使用详解
2017/08/22 Javascript
使用jQuery实现两个div中按钮互换位置的实例代码
2017/09/21 jQuery
vue-router实现组件间的跳转(参数传递)
2017/11/07 Javascript
使用DataTable插件实现异步加载数据
2017/11/19 Javascript
JS如何把字符串转换成json
2020/02/21 Javascript
[02:23]DOTA2英雄基础教程 幻影长矛手
2013/12/09 DOTA
详解在Python程序中使用Cookie的教程
2015/04/30 Python
Python 一键制作微信好友图片墙的方法
2019/05/16 Python
Python+selenium点击网页上指定坐标的实例
2019/07/05 Python
python中bs4.BeautifulSoup的基本用法
2019/07/27 Python
简单瞅瞅Python vars()内置函数的实现
2019/09/27 Python
Python基于正则表达式实现计算器功能
2020/07/13 Python
python实现xlwt xlrd 指定条件给excel行添加颜色
2020/07/14 Python
python中的django是做什么的
2020/07/31 Python
css3学习系列之移动属性详解
2017/07/04 HTML / CSS
马耳他航空公司官方网站:Air Malta
2019/05/15 全球购物
简历中的自我评价范文
2014/02/05 职场文书
财务会计自荐信范文
2014/02/21 职场文书
五一口号
2014/06/19 职场文书
交通处罚决定书
2015/06/24 职场文书
golang正则之命名分组方式
2021/04/25 Golang