php中策略模式详解

参考:https://www.phpmianshi.com/?id=60

概念

在策略模式(Strategy Pattern)中,一个类的行为或其算法可以在运行时更改。这种类型的设计模式属于行为型模式。

 

场景

 

场景1:

假设现在要设计一个购物车系统,一个最简单的情况就是把所有货品的单价乘上数量,但是实际情况肯定比这个复杂。

例如:对普通会员无折扣,对中级会员提供8折优惠,对高级会员提供7折优惠。

 

场景2:

例如:一个电商网站系统,针对男性女性用户要各自跳转到不同的商品类目,并且所有广告位展示不同的广告

 

示例

/**    
 * 策略模式    
 * 使用场景    
 * 假设现在要设计一个购物车系统,一个最简单的情况就是把所有货品的单价乘上数量,但是实际情况肯定比这个复杂。    
 * 例如:对普通会员无折扣,对中级会员提供8折优惠,对高级会员提供7折优惠。    
 * 场景2:    
 * 例如:一个电商网站系统,针对男性女性用户要各自跳转到不同的商品类目,并且所有广告位展示不同的广告    
 */    
interface Strategy    
{    
public function calPrice ($price);    
}    
/**    
 * 普通会员策略类    
 */    
class PrimaryStrategy implements Strategy    
{    
public function calPrice ($price)    
{    
echo "普通会员无折扣";    
return $price;    
}    
}    
/**    
 * 中级会员策略类    
 */    
class MiddleStrategy implements Strategy    
{    
public function calPrice ($price)    
{    
echo "中级会员8折优惠";    
return $price * 0.8;    
}    
}    
/**    
 * 高级会员策略类    
 */    
class HighStrategy implements Strategy    
{    
public function calPrice ($price)    
{    
echo "高级会员7折优惠";    
return $price * 0.7;    
}    
}    
/**    
 * 价格实现类    
 */    
class Price    
{    
/**    
   * 具体的策略类对象    
   */    
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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值