引言
 
  所属:行为型模式,常用设计模式之一
    学习资料:
  • 《大话设计模式》程杰
 
模式概述
 
  分享一篇关于策略模式讲的很好的文章,大家可以参考一下: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

总结

  策略模式就是使用封装一个公共抽象算法,每个算法(比如,打折算法,满减算法)实现这个接口,然后搞个策略工厂类来调用这些算法。

最新文章

  1. day01-1 常用dos命令
  2. Beta阶段第一次Scrum Meeting
  3. Javascript事件机制兼容性解决方案
  4. c#链接数据库
  5. BZOJ 4337: BJOI2015 树的同构 树hash
  6. ajax中基本兼容各浏览器的XMLHttpRequest的创建
  7. 【BZOJ】【1010】【HNOI2008】玩具装箱Toy
  8. [iOS基础控件 - 6.1] 汽车品牌列表 UITableView多项显示
  9. caffe源码阅读(2)-Layer
  10. Mac OS命令行运行Sublime Text
  11. android学习6——canvas的save,restore作用
  12. TCP协议(二)——TIME_WAIT状态
  13. Android App性能评测分析-流畅度篇
  14. Android存储之SharedPreferences
  15. Javase系列之面向对象(一)
  16. Jmeter接口测试问题及解决方法积累
  17. MAC安装JDK及环境变量配置
  18. 配置iis支持.json格式的文件
  19. ELK菜鸟手记 (二) - 高级配置之多应用索引过滤
  20. 给斐讯K1刷机并拨号e信(湖北地区测试无问题)

热门文章

  1. MySQL MHA搭建
  2. redis集群搭建与管理
  3. Go语言 map遍历
  4. mysql获取表列信息、主键信息
  5. QT网络编程Tcp下C/S架构的即时通信
  6. Java文件操作工具类
  7. gmock使用、原理及源码分析
  8. CSAPP buffer lab记录——IA32版本
  9. UVa 247 - Calling Circles(Floyd求有向图的传递闭包)
  10. php------中文出现乱码解决方法