欢迎来到[自学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

北京卫戍区领导机关调整:参谋部政工部等部门亮相 国际奥委会主席今年拟访问日本福岛:我与他们同在 金纳科技完成3000万元A轮融资 火山石资本领投 世界女子最强战同室操戈 於之莹战胜黑嘉嘉夺冠 电影《中邪》被下架后B站用户仍直播:将被片方追责 李彦宏:百度有自己的价值观 未来“AI战略”不变 两岸一旦开打能守多久?台叫嚣:解放军根本攻上不来 春晚小品歧视台湾人?主创:爱台湾但不能不认祖 欧洲央行在调整利率前 将先撤出非常规刺激举措 美加州枪手与警方对峙十余小时后被捕 一警员殉职 黑龙江省农垦总局党委书记王守聪兼任局长 韩美空军将于5月11日启动“超级雷霆”联合军演
吃饭睡觉打库里! 火箭球员字典里就这仨词 美国防部斥资3亿美元为乌克兰生产反坦克导弹系统 台湾民进党为竞选搞内斗 党员感叹:难道要分家 女子购买化妆品使用后致六级伤残 获赔近86万 人大内司委回应校园暴力和欺凌频发:建议修法 马云:企业家的这“三观”,决定了企业能走多远 解读球员与俱乐部劳动纠纷 不属法院民事案件受理范围 英媒:济州岛难民风波后 韩国或将收紧难民政策 特朗普称美国“别无选择” 只能实施关税计划 特朗普喊话俄罗斯:准备接好导弹!俄罗斯直接怼回去 足协杯赛程:国安VS上港6月9日 其余三场延至7月 俄外长:欧洲商界不得不为美国对俄制裁买单
宜信财富旗下产品亏损遭投资人维权 回应非网贷问题 学校被注销 40多名中国留学生新西兰陷困境 加拿大总理印度之行争议频发 致其在国内民调失分 香港元朗公路发生9车相撞事故 造成多人受伤 南华金融:美股与夜期ADR背驰 恒指料回软 特斯拉副总裁辞职 跳槽至奢侈品电商任CEO 人物|高票当选全明星首发!新时代大梦颤抖联盟 牛汇:欧元英镑澳元和日元策略展望 一季度全球PC出货量6040万台 惠普第一联想第二 不怕死想发财的兄弟进 白手起家做什么好 致富小机器 如何利用微信挣钱 AG亚游集团