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

最新一期新秀榜:西帝稳居第一 球哥重新上榜 U23男足古城西安迎挑战 中叙之战门票即日启售 中超第5轮前瞻:恒大鲁能强强对话 京津德比来袭 美网站公布卫星图:朝鲜开始部分拆除核试验场(图) 团体赛首轮於之莹胜崔精 芮乃伟胜吴侑珍 津巴布韦今日将举行大选 现任总统姆南加古瓦参选 美媒:中国与梵蒂冈或签署主教任命协议 中青报:父亲的“卖牛钱”被打赏 该如何管住孩子的手 女神约会迟到半小时 男友怒闯红灯害她毁容失明 为什么组建退役军人事务部:不让军人流血又流泪 张稀哲迎来禁赛后首场比赛 足协杯出场与球队磨合 男子与女友打车出门游玩 因5元车费持刀捅伤司机
特朗普威胁民主党:不支持移民政策 就让政府关门 暴雨致北京昌平5条线路停运 两村125人被转移 新一波流感或将3月卷土重来 家有老人小孩的速看 姚明:我“小题大做” 解决小问题可以把它落实 意甲-国米主场中柱平那不勒斯 尤文少赛1场登顶 英皇证券:美科技企或遭政策打击 中船防务短线可吼 拆迁办半夜大喇叭宣传 官方:已处理 不便公开 林良铭西丙升级赛对手确定 战强敌新帅磨合成关键 法国:2018年“开学补助”总额将达20亿欧元 象棋青年赛付嘉伟胜储鎏辉 6轮过后跃居男子榜首 这13座城市可率先试验5G 下载2G电影眨眼间即完成 利多出尽 玉米市场轨迹或生变?
沙特王储承认以色列有权有土地 称赞两国外交前景 美国迁使馆引发巴以冲突 联合国拟调查被美国拦下 卡帅:回广州就是要夺得冠军 很难尽快纠正错误 董记银隆刮骨疗伤:历史问题严重 改革会有阵痛期 《星居》曹云金回忆十六年求艺艰辛历程 高三女生花13万上全托补习班 4个月成绩下滑140分 研究:Twitter平台上 假新闻转发概率比真新闻高7… 被火箭暴虐队补强全指望老大!还想要降薪的 嫦娥四号中继星升空 揭月球背面中继通信三大问题 前景最好的十大专业 利润最高的不起眼行业 过年摆地摊赚10万 适合女性开的十五种店 AG亚游集团