1.概念

策略模式:将一组特定的行为和算法封装成类。以适应某些特定的上下文环境,这样的模式就是策略模式

2.功能

使用策略模式实现Ioc, 依赖倒置, 控制反转

3.举例

假如一个电商站点系统,针对不同的人群要跳转到不同的商品类目。而且全部广告位展示不同的广告

4.要解决的问题

1.不会由于上下文的改变而改变代码(传统都是使用 if else 来推断)
2.假设新添加一种类型的用户,仅仅须要添加一种策略就好了,不须要在代码中 if else 里面在继续加入逻辑
3.不同的地方仅仅须要运行不同的策略就好了,这样就可以解决这个问题
4.从硬编码到解耦的使用
5.最基本的是攻克了程序中的分支逻辑

5.实战代码展示

5.1 声明策略的接口文件

interface UserStrategy {function showAd();function showCategory();
} 

5.2定义女性用户的策略

class FemaleUserStrategy implements UserStrategy  {function showAd(){echo "2014新款女装";}function showCategory(){echo "服装";}
} 

5.3定义男性用户的策略

class MaleUserStrategy implements UserStrategy  {function showAd(){echo "IPhone6";}function showCategory(){echo "电子产品";}
} 

6. 页面展示与使用

class Page
{//保存策略对象protected $strategy;//首页信息输出function index(){//传统写法,与输出if (isset($_GET['famale'])) {echo '女性';}else if (isset($_GET['famale'])) {echo '男性';}//假设新增了业务逻辑后面会非常多的  if  else//策略模式的输出echo $this->strategy->showAd();echo '<br>';echo $this->strategy->showCategory();}//策略模式来解决,注冊策略function setStrategy(UserStrategy $strategy){$this->strategy = $strategy;}
}//运行
$page = new Page;
//这里依据实际上下文的环境
if (isset($_GET['famale'])) {$strategy = new FemaleUserStrategy();
}else if (isset($_GET['male'])) {$strategy = new MaleUserStrategy();
}
//使依赖关系反转,终于运行在使用关系绑定,输出结果(攻克了传统写法的耦合问题)
$page->setStrategy($strategy);
$page->index();

PHP设计模式之策略模式相关推荐

  1. Java设计模式之策略模式与状态模式

    一.策略模式定义 定义:策略模式定义了一系列的算法,并将每一个算法封装起来,而且使他们之间可以相互替换,策略模式可以在不影响客户端的情况下发生变化. 好了,定义看看就完了,我知道你很烦看定义. 二.策 ...

  2. 换个姿势学设计模式:策略模式

    点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 来源:公众号「闻人的技术博客」 前言 前段时间,接到一个 ...

  3. 研磨设计模式之 策略模式--转

    http://www.uml.org.cn/sjms/201009092.asp 研磨设计模式之 策略模式   2010-09-09 作者:云飞龙行 来源:云飞龙行的blog   先感谢众多朋友的支持 ...

  4. 设计模式:策略模式(Strategy)

    定   义:它定义了算法家族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化, 不会影响到使用算法的客户. 示例:商场收银系统,实现正常收费.满300返100.打8折.......等不同收费 ...

  5. C++设计模式之策略模式(Strategy)

    Strategy策略模式 作用:定义了算法家族,分别封装起来,让他们之间可以互相替换,此模式让算法的变化,不会影响到使用算法的客户. UML图: 代码实现 #include <iostream& ...

  6. python策略模式包含角色_详解Python设计模式之策略模式

    虽然设计模式与语言无关,但这并不意味着每一个模式都能在每一门语言中使用.<设计模式:可复用面向对象软件的基础>一书中有 23 个模式,其中有 16 个在动态语言中"不见了,或者简 ...

  7. 一篇博客读懂设计模式之-----策略模式

    设计模式之策略模式 在策略模式中,我们创建表示各种策略的对象和一个行为随着策略对象改变而改变的对象 定义一系列的算法,把它们一个个封装起来, 并且使它们可相互替换. 主要解决:在有多种算法相似的情况下 ...

  8. 面向对象设计模式之策略模式

    面向对象设计模式之策略模式 1.策略模式定义了算法族,分别封装起来,让他们之间可以互相替换,此模式让算法的变化独立于使用算法的客户 2.抽象鸭子类,鸭子飞行行为在此处类似于算法族 1 package ...

  9. java策略模式详解_Java经典设计模式之策略模式原理与用法详解

    本文实例讲述了Java经典设计模式之策略模式.分享给大家供大家参考,具体如下: 策略模式指:策略模式指将程序中可变部分抽象分离成一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换.策略模式 ...

  10. 策略设计模式_设计模式之策略模式总结

    再上一篇文章<设计模式之策略模式>中,我们通过模拟鸭子项目,了解了什么是策略模式,怎么使用策略模式.本文将通过鸭子项目的学习,对策略模式进行总结. 策略模式: 分别封装行为接口,实现算法族 ...

最新文章

  1. Android Studio Day03-2(常用操作)
  2. 企业通信需要专业高效工具
  3. c++ class struct同名_C/C++面向对象编程之封装
  4. 小熊派:用OpenHarmory3.0点亮LED
  5. hive架构及使用场景
  6. django 1.8 官方文档翻译: 2-5-10 数据库函数
  7. PHP实例方法,PHP实例方法有哪些例子
  8. 使用UrlRewriteFilter对url进行更替
  9. Linux下手机驱动安装
  10. 计算机实训报告英语,英文计算机实习证明格式
  11. Android人脸支付功能,终于来了,华为Mate20 Pro微信人脸支付功能已上线
  12. # [Contrastive Learning] Contrastive Coherence Preserving Loss for Versatile Style Transfer
  13. 在华为手机上查看连接过的wifi密码(不愁记性不好)
  14. 真爱,就要失去自己?
  15. vue 引入字体图标显示方块
  16. idea通过maven使用docker插件生成镜像并推送到harbor仓库
  17. 何恺明新作品:VITDet
  18. 如何做用户画像分析?
  19. 码绘——动态图形艺术自画像
  20. Python基础之告警定义与告警抑制

热门文章

  1. JAVA毕设项目固定资产管理系统(Vue+Mybatis+Maven+Mysql+sprnig+SpringMVC)
  2. 2022-4-26 基于单片机的四路抢答器(风吹摇铃 奔赴星海)
  3. 自动驾驶CRUW数据集(大型毫米波频域图数据集)
  4. 阿里怎么来看O2O对商业生态的破局与重构?
  5. outlook邮箱邮件内容乱码_Outlook 2010 收到的邮件内容乱码, 显示成?
  6. 2012“粤嵌杯”大学生嵌入式物联网设计大赛成功举办
  7. 【Android:构建相机应用】
  8. Python编程神器-解锁会员 !
  9. 转个弯,就能够找回最初的梦想
  10. C语言实现 linux 下系统时间的设置