欢迎来到[自学php网] ①群 AG亚游集团

AG亚游集团 > php专栏 > php综合实列 >

PHP策略模式定义与用法示例

来源:自学PHP网 ?? 时间:2017-07-31 16:25?作者:

[导读] 这篇文章主要介绍了PHP策略模式定义与用法,结合实例形式简单分析了php策略模式的原理、实现与使用方法,需要的朋友可以参考下...

本文实例讲述了PHP策略模式定义与用法。分享给大家供大家参考,具体如下:

概述

策略模式属于对象的行为模式。其用意是针对一组算法,将每个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替换。策略模式使得算法可以在不影响到客户端的情况下发生变化

UML图

策略模式中主要角色

这个模式设计到三个角色:

环境角色(Context):持有一个Strategy的引用
抽象策略(Strategy)角色:这是一个抽象角色,通常由一个接口或抽象类实现。此角色给出所有的具体的策略类所需的接口
具体策略(ConcreateStrategy)角色:包装了相关的算法或行为

使用场景

假设现在要设计一个购物车系统,一个最简单的情况就是把所有货品的单价乘上数量,但是实际情况肯定比这个复杂。例如:对普通会员无折扣,对中级会员提供8折优惠,对高级会员提供7折优惠。

根据上述描述,货品价格是根据以下几个算法中的一个进行的:

对普通会员无折扣
对中级会员8折
对高级会员7折

UML图

实现代码:

<?php
/**
 * 策略抽象类
 * @author wzy
 *
 */
interface Strategy
{
  public function calPrice ($price);
}
/**
 * 普通会员策略类
 *
 * @author wzy
 *
 */
class PrimaryStrategy implements Strategy
{
  public function calPrice ($price)
  {
    echo "普通会员无折扣";
    return $price;
  }
}
/**
 * 中级会员策略类
 *
 * @author wzy
 *
 */
class MiddleStrategy implements Strategy
{
  public function calPrice ($price)
  {
    echo "中级会员8折优惠";
    return $price * 0.8;
  }
}
/**
 * 高级会员策略类
 *
 * @author wzy
 *
 */
class HighStrategy implements Strategy
{
  public function calPrice ($price)
  {
    echo "高级会员7折优惠";
    return $price * 0.7;
  }
}
/**
 * Context实现类
 *
 * @author wzy
 *
 */
class Price
{
  /**
   * 具体的策略类对象
   *
   * @var object
   */
  private $strategyInstance;
  /**
   * 构造函数,传入一个具体的策略对象
   *
   * @param object $instance
   */
  public function __construct ($instance)
  {
    $this->strategyInstance = $instance;
  }
  /**
   * 计算货品的价格
   *
   * @param double $price
   */
  public function quote ($price)
  {
    return $this->strategyInstance->calPrice($price);
  }
}
/**
 * 客户端操作
 */
$high = new HighStrategy();
$priceClass = new Price($high);
$price = $priceClass->quote(400);
echo $price;
?>

回顾策略模式

策略模式的重心不是如何实现算法,而是如何组织、调用这些算法,从而让程序结构更灵活,具有更好的扩展性和维护性

算法的平等性

策略模式一个很大的特点就是各个策略算法的平等性。对于一系列具体的策略算法,大家的地位是一样的,这样才能实现算法之间的互相转换

运行时策略的唯一性

运行期间,策略模式在每一个时刻只能使用一个具体的策略实现对象,虽然可以动态地在不同的策略实现中切换,但是同时只有一个

、、、、、

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

最新文章

点击排行

自学PHP网专注网站建设学习,PHP程序学习,平面设计学习,以及操作系统学习

京ICP备14009008号@版权所有AG亚游集团

网站声明:本站所有视频,教程都由网友上传,站长收集和分享给大家学习使用,如由牵扯版权问题请联系站长邮箱904561283@qq.com

能影响美国政治的商业大佬发话了:坚决反对贸易战 内蒙古乌海市委常委统战部长陈文库被查(图/简历) 如何一举双赢 这里有答案 受贿近千万官员积极改造第三次获减刑 原判无期 中国这款新武器令美高官惊呼无法应对:只能用核武 黄龙士女子擂台李赫胜牛荣子 将战韩国金美里 温室效应:二氧化碳究竟“是正是邪”科学家算出答案 巴萨官方宣布巴西后卫租借土超 4年出场不到10次 曝前新疆外援科顿有望加盟山东 曾打过9场CBA 法国品牌台湾官网标注“中国台湾” “台独”气炸 双星伴月天象19日将上演:金星“牵手”水星会娥眉 太遗憾!双色球二等频井喷 还不看看蓝球特点?
环球时报:中国这样的大国 有多艘航母才是正常的 受保镖打人事件影响 法总统马克龙民意创新低 男子打车遭遇天价网约车费 9公里要1650.1元(图) 温格煮青蛙!阿森纳雄心已被他耗尽 全变成桑切斯 军报:有的军营开放活动老套圈定对象 需理念刷新 一匹出生鼻子歪曲的马:它的命运究竟如何呢 两部委推动提速降费 流量均价年内降30%以上 谷歌收欧盟43亿欧元“罚单” 安卓生态将生变? 流量漫游费7月1日取消 三大运营商:加班加点推进 李昊桐首秀有苦有甜:距离难判断 同组老米体验佳 英超MVP认怂:很后悔罢训逼宫 现在不想转会曼城 中国赛半决赛塞尔比6-3结束半场 罗伯逊4-5暂落后
黄金多头“至暗时刻”:一日丧失近半年利润 曝英超升班马要引进武磊 中资球队要拓宽中国市场 土耳其一大巴发生交通事故 已致11死46伤 37位河南企业家代表委员亮相全国两会 食品业最多 曝曼联老好人遭老东家挖角 踢不上主力他真想走 西班牙一中国侨胞遭袭身亡凶手落网 中使馆促严惩 贵州涨企事业和机关退休人员养老金 惠及142万人 明日起我国中东部再迎雨雪并伴有阵风 将影响春运 狂刷队史纪录!最强一季火箭能圆梦总冠军吗? 白手起家做什么好 马云说未来赚钱的行业 笨蛋也能年赚100万txt 适合农村办厂的项目 AG亚游集团