php工厂模式使用场景[通俗易懂]

php工厂模式使用场景[通俗易懂]场景:使用工厂模式接入:阿里短信验证、腾讯短信验证、百度短信验证创建类文件BaseSMS.php–基础短信服务接口类AliSMS.php–阿里短信服务类BaiduSMS.php–百度短信服务类TencentSMS.php–腾讯短信服务类SmsBusiness.php–短信业务逻辑类具体代码BaseSMS.php–基础短信服务接口类interfaceBaseSMS{publicstaticfunctionsendCode($phone,$co

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

场景:使用工厂模式接入:阿里短信验证、腾讯短信验证、百度短信验证

创建类文件

  1. BaseSMS.php – 基础短信服务接口类
  2. AliSMS.php – 阿里短信服务类
  3. BaiduSMS.php – 百度短信服务类
  4. TencentSMS.php – 腾讯短信服务类
  5. SmsBusiness.php – 短信业务逻辑类

具体代码

BaseSMS.php – 基础短信服务接口类

interface BaseSMS
{ 
   
    public static function sendCode($phone, $code);
}

AliSMS.php – 阿里短信服务类

class AliSMS implements BaseSMS
{ 
   
	public static function sendCode($phone, $code){ 
   
		// 这里是阿里云短信服务代码
		// XXXXXXXXXXXXXXXXXXXXX
		return '阿里云短信验证码发送成功';
	}
}

BaiduSMS.php – 百度短信服务类

class BaiduSMS implements BaseSMS
{ 
   
	public static function sendCode($phone, $code){ 
   
		// 这里是百度云短信服务代码
		// XXXXXXXXXXXXXXXXXXXXX
		return '百度云短信验证码发送成功';
	}
}

TencentSMS.php – 腾讯短信服务类

class TencentSMS implements BaseSMS
{ 
   
	public static function sendCode($phone, $code){ 
   
		// 这里是腾讯云短信服务代码
		// XXXXXXXXXXXXXXXXXXXXX
		return '腾讯云短信验证码发送成功';
	}
}

SmsBusiness.php – 短信业务逻辑类

class SmsBusiness
{ 
   
	public static function sendCode($phone, $len = 4, $type){ 
   
		// 生成短信验证码
		$code = mt_rand(1000,9999); // 默认为4位数验证码
		if ($len == 6){ 
    // 长度为6,则生成6位数验证码
			$code = mt_rand(100000,999999);
		}
		
		// 工厂模式创建不同的短信服务商
		$smsObj = null;
		switch($type){ 
   
			case 'ali':
				$smsObj = new AliSMS();
			break;
				case 'baidu':
				$smsObj = new BaiduSMS();
			break;
				case 'tencent':
				$smsObj = new TencentSMS();
			break;
		}
		
		$sms = $smsObj::sendCode($phone, $code);
		if ($sms) { 
   
            // 成功:把短信验证码记录到 redis, 并且设置失效时间
            cache(config('stores.redis.prefix') . $phone, $code, config('stores.redis.expire'));
        }
		return true;
	}
}

最后,控制器调用 业务逻辑层短信发送验证码服务

class SMSController { 
   
	public function code (){ 
   
		$phone = request()->param('phone_number', '', 'trim');
		
		/* * 这里是参数验证,略 */
		
		// 调用业务逻辑层的sendCode
        if (SmsBusiness::sendCode($phoneNumber, config('code.code.length'), 'ali')){ 
   
            return show(config('status.success'), '验证码发送成功');
        }
        return show(config('status.error'), '验证码发送失败');
	}
}

——- THE END ——-

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/164357.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 【其他】资源整合「建议收藏」

    【其他】资源整合「建议收藏」偶然整理云盘,发现曾经收藏过一些比较不错的资源,正好分享一下;1.C语言教程,郝斌老师作为读书时候的启蒙老师,推荐一波链接:https://pan.baidu.com/s/1rn_cHgNs5qIZV9ON-pcWVw提取码:wa7j2.UI框架链接:https://pan.baidu.com/s/1Q2Bj-i79C1gDWZSvfDVEeQ提取码:a47l3.UI万能框架链接:https://pan.baidu.com/s/1Ikvqo9mtabD104bWVLte2w…

    2022年5月22日
    50
  • 蓝桥杯嵌入式开发经验分享(1.嵌入式学习准备)

    蓝桥杯嵌入式开发经验分享(1.嵌入式学习准备)蓝桥杯嵌入式学习准备联系方式作者:马一飞QQ:791729359…

    2022年6月12日
    29
  • hashset自定义去重规则_sql数据去重

    hashset自定义去重规则_sql数据去重publicstaticvoidmain(String[]args){List<String>list=newArrayList<>();list.add(“d”);list.add(“d”);list.add(“d”);System.out.println(list);list=remov…

    2022年9月28日
    1
  • 人人工势场法

    人人工势场法人工势场法是局部路径规划的一种比较常用的方法。这种方法假设机器人在一种虚拟力场下运动。一、简介如图所示,机器人在一个二维环境下运动,图中指出了机器人,障碍和目标之间的相对位置。 这个图比较清晰的说明了人工势场法的作用,物体的初始点在一个较高的“山头”上,要到达的目标点在“山脚”下,这就形成了一种势场,物体在这种势的引导下,避开障碍物,到达目标点。

    2022年6月15日
    25
  • JDK卸载与重装「建议收藏」

    JDK卸载与重装「建议收藏」JDK卸载与重装前言彻底卸载JDK这样新的jdk就安装完成了前言发现网上很多博文并没有完整的讲述如何卸载和重装jdk,自己在重装jdk的时候遇到很多问题,搜索很多博文,把内容整合起来,才解决问题,而且还有许多安装jdk,还要配置classpath环境变量,在jdk1.5版本之后已经不需要配置。本篇博文详细记录重装jdk的过程。彻底卸载JDK第一步:卸载原先的JDK(1)用控制面板卸载(2)安全类软件(360等)自带的软件卸载工具的功能卸载(3)直接删除jDK文件夹第二步:删除注册表

    2022年6月26日
    37
  • docker 镜像构建_如何更新docker镜像内的文件

    docker 镜像构建_如何更新docker镜像内的文件前言如果我们已经安装了一个python3的环境,如果另一台机器也需要安装同样的环境又要敲一遍,很麻烦,这里可以配置Dockerfile文件,让其自动安装,类似shell脚本Dockerfile编写

    2022年7月31日
    12

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号