「这是我参与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多种实现,实现方法跟上面类似,只是逻辑会更复杂而已。
下一章继续