「PHP」策略模式
2024-09-04 13:58:30
引言
所属:行为型模式,常用设计模式之一
学习资料:
- 《大话设计模式》程杰
模式概述
分享一篇关于策略模式讲的很好的文章,大家可以参考一下:https://www.cnblogs.com/qixuejia/p/4370270.html
策略模式就是用来封装算法的,但在实践中,我们发现可以用它来封装几乎任何类型的规则,只要在分析过程中听到需要在不同时间应用不同的业务规则,就可以考虑使用策略模式处理这种变化的可能性。
举个栗子
超市促销活动,分别有原价,八折,满300减50,使用策略模式……,程序如何设计。
流程图如下:
程序设计代码:
1. 抽象活动算法类
<?php
/**
* 抽象活动算法类
*/
namespace strategy; abstract class StrategyAbstract
{
/**
* 具体活动算法方法
* @return mixed
*/
public abstract function doAction($money);
}
2. 具体算法产品类
<?php
/**
* 满减算法产品类
*/
namespace strategy; class ManJianStrategy extends StrategyAbstract
{
public function doAction($money)
{
echo '满减算法:原价'. $money .'元';
}
}
<?php
/**
* 打折算法产品类
*/
namespace strategy; class DaZheStrategy extends StrategyAbstract
{
/**
* 具体算法实现
* @param $money
* @return mixed|void
*/
public function doAction($money)
{
echo '打折算法:原价'. $money .'元';
}
}
3. 策略工厂类
<?php
/**
* 策略工厂类
*/
namespace strategy; class StrategyFind
{
private $strategy_mode; /**
* 初始时,传入具体的策略对象
* @param $mode
*/
public function __construct($mode)
{
$this->strategy_mode = $mode;
} /**
* 执行打折算法
* @param $money
*/
public function get($money)
{
$this->strategy_mode->doAction($money);
}
}
入口文件
<?php namespace strategy; include '../autoload.php';
// 满减折算
$mode1 = new StrategyFind(new ManJianStrategy());
$mode1->get(100); echo '<br>'; // 满减活动
$mode2= new StrategyFind(new DaZheStrategy());
$mode2->get(100);
以下为源码地址
GitHub源码地址:https://github.com/xiaobaoword/design_pattern/tree/master
总结
策略模式就是使用封装一个公共抽象算法,每个算法(比如,打折算法,满减算法)实现这个接口,然后搞个策略工厂类来调用这些算法。
最新文章
- day01-1 常用dos命令
- Beta阶段第一次Scrum Meeting
- Javascript事件机制兼容性解决方案
- c#链接数据库
- BZOJ 4337: BJOI2015 树的同构 树hash
- ajax中基本兼容各浏览器的XMLHttpRequest的创建
- 【BZOJ】【1010】【HNOI2008】玩具装箱Toy
- [iOS基础控件 - 6.1] 汽车品牌列表 UITableView多项显示
- caffe源码阅读(2)-Layer
- Mac OS命令行运行Sublime Text
- android学习6——canvas的save,restore作用
- TCP协议(二)——TIME_WAIT状态
- Android App性能评测分析-流畅度篇
- Android存储之SharedPreferences
- Javase系列之面向对象(一)
- Jmeter接口测试问题及解决方法积累
- MAC安装JDK及环境变量配置
- 配置iis支持.json格式的文件
- ELK菜鸟手记 (二) - 高级配置之多应用索引过滤
- 给斐讯K1刷机并拨号e信(湖北地区测试无问题)