PHP 设计模式十一 策略模式

282 阅读2分钟

「这是我参与11月更文挑战的第21天,活动详情查看:2021最后一次更文挑战

课程背景

  • 最近完成一个项目 对于代码分层有了一丢丢了解 但是架构设计合理性上存在问题
  • 万物看本质基本功硬 底层知识扎实才能写出更优质的代码 才能走得更远
  • 作为努力奔跑的程序员 又一次的去温习 思考 设计模式等基础的php知识
  • 因为掘金粑粑有奖励,所以把学习的笔记整理记录并分享了出来。

问题引出

将一组特定的行为和算法封装成类,以适应某些特定的上下文环境,这种模式就是策略模式。举个栗子抖音推送广告对于男性女性是不同的。男性偏向于电子产品,女性则偏重于衣服。

我们根据传入的参数不同,加入不同的判断条件。

if($_GET['type'] == 'man'){
       // todo
}elseif($_GET['type'] == 'woman'){
    // todo
}

这样写的缺点是,如果再加入一种参数,则需要根据需求重新的编写逻辑。

2 我们将不同参数要执行的代码定义成一种策略,这样多种方法只需要具体实现具体策略就可以。

正文开始

1 创建用户行为的策略文件 \Liiy\UserStrategy.php 并约束用户的行为。

<?php
namespace Liiy;
/**
 * [接口中约束行为] 
 * Author Liiy. 
 * Date 2021/11/27. 
 * Time 13:47. 
 */

interface UserStrategy{
    function showAd(); //显示广告
    function showCategory(); //展示类目
}

2 编写策略具体的实现
\Liiy\FemaleUserStrategy.php

<?php
namespace Liiy;

use imooc\UserTrategy;

class FemaleUserStrategy implements UserTrategy{

    function showAd(){
        echo '2021新款女装';
    }

    function showCategory()
    {
        echo '女装';
    }
}

\Liiy\MaleUserStrategy.php

<?php
namespace Liiy;

use imooc\UserTrategy;

class MaleUserStrategy implements UserTrategy{

    function showAd(){
        echo 'Iphone6';
    }

    function showCategory()
    {
        echo '电子产品';
    }
}

这里编写了策略的两种具体实现,其实在定义好策略以后。可以根据定义好的规则去给策略增加N多种实现,实现方法跟上面类似,只是逻辑会更复杂而已。

下一章继续