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模板引擎SMARTY
Oct 09 PHP
php异常:Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE  eval()'d code error
May 19 PHP
PHP排序算法的复习和总结
Feb 15 PHP
php 如何获取数组第一个值
Aug 06 PHP
PHP多个文件上传到服务器实例
Oct 29 PHP
WordPress中is_singular()函数简介
Feb 05 PHP
typecho插件编写教程(三):保存配置
May 28 PHP
PHP使用GD库输出汉字的方法【测试可用】
Nov 10 PHP
PHP基于MySQLI函数封装的数据库连接工具类【定义与用法】
Aug 11 PHP
PHP 的Opcache加速的使用方法
Dec 29 PHP
PHP 记录访客的浏览信息方法
Jan 29 PHP
ThinkPHP3.2.3框架邮件发送功能图文实例详解
Apr 23 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 MsSql server时遇到的中文编码问题
2009/06/11 PHP
第六章 php目录与文件操作
2011/12/30 PHP
通过PHP修改Linux或Unix口令的方法分享
2012/01/30 PHP
解析thinkphp基本配置 convention.php
2013/06/18 PHP
初识Laravel
2014/10/30 PHP
Cygwin中安装PHP方法步骤
2015/07/04 PHP
thinkphp autoload 命名空间自定义 namespace
2015/07/17 PHP
PHP操作redis实现的分页列表,新增,删除功能封装类与用法示例
2018/08/04 PHP
PHP设计模式之工厂模式(Factory Pattern)的讲解
2019/03/21 PHP
JS 控制CSS样式表
2009/08/20 Javascript
flexigrid 类似ext grid的JS表格代码
2010/07/17 Javascript
一些常用且实用的原生JavaScript函数
2010/09/08 Javascript
理解Javascript_13_执行模型详解
2010/10/20 Javascript
JQuery中getJSON的使用方法
2010/12/13 Javascript
js 有框架页面跳转(target)三种情况下的应用
2013/04/09 Javascript
jquery跨域请求示例分享(jquery发送ajax请求)
2014/03/25 Javascript
浅谈JavaScript中运算符的优先级
2015/07/07 Javascript
清除js缓存的多种方法总结
2016/12/09 Javascript
微信小程序网络请求的封装与填坑之路
2017/04/01 Javascript
JS正则表达式验证中文字符
2017/05/08 Javascript
javascript 开发之百度地图使用到的js函数整理
2017/05/19 Javascript
在vue项目中使用md5加密的方法
2018/09/14 Javascript
vue-cli V3.0版本的使用详解
2018/10/24 Javascript
VUE基于NUXT的SSR 服务端渲染
2018/11/30 Javascript
ES6 迭代器与可迭代对象的实现
2019/02/11 Javascript
Javascript ParentNode和ChildNode接口原理解析
2020/03/16 Javascript
python如何把嵌套列表转变成普通列表
2018/03/20 Python
python 检查数据中是否有缺失值,删除缺失值的方式
2019/12/02 Python
Python3自定义http/https请求拦截mitmproxy脚本实例
2020/05/11 Python
编写python代码实现简单抽奖器
2020/10/20 Python
《恐龙》教学反思
2014/04/27 职场文书
环境建议书
2015/02/04 职场文书
美术教师个人工作总结
2015/02/06 职场文书
生产车间主任岗位职责
2015/04/08 职场文书
PHP对接阿里云虚拟号的实现(号码隐私保护)
2021/04/06 PHP