首页 > 编程 > PHP > 正文

PHP设计模式之策略模式

2020-03-22 17:52:59
字体:
来源:转载
供稿:网友
  • 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定义女性用户的策略
    html' target='_blank'>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['famale'])) {    $strategy = new MaleUserStrategy();}//使依赖关系反转,最终执行在使用关系绑定,输出结果(解决了传统写法的耦合问题)$page->setStrategy($strategy);$page->index();

    PHP编程

    郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。

  • 发表评论 共有条评论
    用户名: 密码:
    验证码: 匿名发表