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 相关文章推荐
php中使用explode查找某个字符是否存在的方法
Jul 12 PHP
smarty模板引擎中自定义函数的方法
Jan 22 PHP
详解PHP执行定时任务的实现思路
Dec 21 PHP
ThinkPHP使用Ueditor的方法详解
May 20 PHP
php中的登陆login实例代码
Jun 20 PHP
php中引用&amp;的用法分析【变量引用,函数引用,对象引用】
Dec 12 PHP
PHP实现对xml进行简单的增删改查(CRUD)操作示例
May 19 PHP
yii2 上传图片的示例代码
Nov 02 PHP
laravel中的一些简单实用功能
Nov 03 PHP
php判断/计算闰年的方法小结【三种方法】
Jul 06 PHP
mysqli扩展无法在PHP7下升级问题的解决
Sep 10 PHP
YII2框架中查询生成器Query()的使用方法示例
Mar 18 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的历史和优缺点
2006/10/09 PHP
PHP数据库链接类(PDO+Access)实例分享
2013/12/05 PHP
php导出csv数据在浏览器中输出提供下载或保存到文件的示例
2014/04/24 PHP
再推荐十款免费的php开发工具
2015/11/09 PHP
如何使用GDB调试PHP程序
2015/12/08 PHP
WordPress中转义HTML与过滤链接的相关PHP函数使用解析
2015/12/22 PHP
自写的利用PDO对mysql数据库增删改查操作类
2018/02/19 PHP
javascript 函数使用说明
2010/04/07 Javascript
一步一步制作jquery插件Tabs实现过程
2010/07/06 Javascript
25个好玩的JavaScript小游戏分享
2011/04/22 Javascript
本地图片预览(支持IE6/IE7/IE8/Firefox3)经验总结
2013/03/25 Javascript
jquery属性选择器not has怎么写 行悬停高亮显示
2013/11/13 Javascript
ajax如何实现页面局部跳转与结果返回
2015/08/24 Javascript
通过设置CSS中的position属性来固定层的位置
2015/12/14 Javascript
详解vue事件对象、冒泡、阻止默认行为
2017/03/20 Javascript
Angularjs自定义指令Directive详解
2017/05/27 Javascript
Webpack常见静态资源处理-模块加载器(Loaders)+ExtractTextPlugin插件
2017/06/29 Javascript
vue+element-ui动态生成多级表头的方法
2018/08/28 Javascript
小程序红包雨的实现示例
2019/02/19 Javascript
[01:36:19]Secret vs NB 2018国际邀请赛小组赛BO2 第一场 8.19
2018/08/21 DOTA
pytorch构建网络模型的4种方法
2018/04/13 Python
5分钟 Pipenv 上手指南
2018/12/20 Python
新年快乐! python实现绚烂的烟花绽放效果
2019/01/30 Python
Python学习笔记之变量、自定义函数用法示例
2019/05/28 Python
python爬虫 模拟登录人人网过程解析
2019/07/31 Python
Python的Lambda函数用法详解
2019/09/03 Python
python制作英语翻译小工具代码实例
2019/09/09 Python
Python3 mmap内存映射文件示例解析
2020/03/23 Python
matplotlib图例legend语法及设置的方法
2020/07/28 Python
韩国三星旗下的一家超市连锁店:Home Plus
2016/07/30 全球购物
计算机专业自我鉴定
2013/10/15 职场文书
老公出轨后的保证书
2015/05/08 职场文书
解决golang post文件时Content-Type出现的问题
2021/05/02 Golang
JavaScript异步操作中串行和并行
2021/11/20 Javascript
Python的代理类实现,控制访问和修改属性的权限你都了解吗
2022/03/21 Python
Python几种酷炫的进度条的方式
2022/04/11 Python