PHP设计模式-策略模式

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

1.定义

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

2.实际应用

假如一个电商网站系统针对男性女性用户要各自跳转到不同的商品类目,并且所有广告位展示不同的广告。这里需要针对男性和女性用户分别定制一个策略,每一个策略中都有自己的广告位输出及商品类目输出方法。

3.代码实现

  • 在实现具体的策略之前我们需要定义一个接口规范
<?php

// 定义用户策略接口
interface UserStrategy {
    // 现实广告
    public function showAd();
    // 现实商品类目
    public function showCategory();
}
  • 在女性具体的策略类中实现策略接口定义的方法
<?php

namespace app\stragory;

/**
* 女性具体策略类(实现用户策略)
*/
class FemaleUserStrategy implements UserStrategy {
    public function showAd()
    {
        return '女性广告内容';
    }

    public function showCategory()
    {
        return '女性商品类目';
    }
}
  • 在男性具体的策略类中实现策略接口定义的方法
<?php

namespace app\stragory;

/**
* 男性具体策略类(实现用户策略)
*/
class MaleUserStrategy implements UserStrategy {
    public function showAd()
    {
        return '男性广告内容';
    }

    public function showCategory()
    {
        return '男性商品类目';
    }
}
  • 在需要使用的地方调用不用的策略
<?php

use app\stragory\FemaleUserStrategy;

use app\stragory\MaleUserStrategy;

//通过前端参数或者登录的session判断使用哪种策略
if($_GET['sex']=='male'){
    $userStrategy = new MaleUserStrategy();
} else {
    $userStrategy = new FemaleUserStrategy();
}
// 显示广告
var_dump($userStrategy->showAd());
// 显示商品类目
var_dump($userStrategy->showCategory());

在上述代码中可以看出,使用策略模式实现Ioc,依赖倒置,控制反转。如果某个策略需要修改时,我们不需要去修改接口中的代码,只需要修改对应的策略。这样很好的做到了代码解耦。

 

有遗漏或者不对的可以在我的公众号留言哦

编程经验共享公众号二维码

编程经验共享公众号二维码
更多内容关注公众号
Copyright © 2021 编程经验共享 赣ICP备2021010401号-1