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; ?>
回顾策略模式
策略模式的重心不是如何实现算法,而是如何组织、调用这些算法,从而让程序结构更灵活,具有更好的扩展性和维护性
算法的平等性
策略模式一个很大的特点就是各个策略算法的平等性。对于一系列具体的策略算法,大家的地位是一样的,这样才能实现算法之间的互相转换
运行时策略的唯一性
运行期间,策略模式在每一个时刻只能使用一个具体的策略实现对象,虽然可以动态地在不同的策略实现中切换,但是同时只有一个
(资源库 www.zyku.net)
您可能感兴趣的文章
- 07-27阿里云删除快照策略以及快照禁止自动计费
- 12-25Windows Server 2008 R2常规安全设置及基本安全策略
- 03-09鸿蒙手机平板多屏互动使用教程
- 01-11猫猫识字-猫猫识字应用软件功能介绍
- 12-09华为p30如何设置24小时制显示
- 10-17oppok9s设置陌生号码拦截教程介绍
- 10-01ios15专注模式怎么自动开启
- 10-14华为手机如何关闭拍照闪光灯
- 09-20QQ看点在哪里查看等级
- 11-11ipad青少年模式在哪开启
- 02-19一加9pro设置自然灾害预警方法
- 12-27速充新能源-速充新能源应用软件功能介
- 10-13opporeno6怎么开启USB调试模式
- 01-11全速手机卫士-全速手机卫士应用软件功
- 09-17keep手环如何绑定手机
- 03-27Python API 邮件发送测试
- 02-16小米note9单手模式设置教程
- 04-07vivos9手机关闭快应用的方法
- 03-10phpStudy-Linux/Win PHP环境集成包下
- 12-09苹果13如何截长图
最近更新
阅读排行
猜你喜欢
- 02-27小米手机设置防误触功能教程
- 10-08oplayerhd lite倍速设置步骤介绍
- 01-11智能清理助手-智能清理助手应用软件功
- 01-12ip摄像头app-ip摄像头app应用软件功能
- 06-25金山云
- 01-10紫杭健康-紫杭健康应用软件功能介绍
- 09-14Tableau是什么?Tableau介绍
- 01-12致用语文小学版-致用语文小学版应用软
- 12-28华为watch3家庭空间怎么共享位置
- 10-13realmegtneo2怎么唤醒语音助手