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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 【Java】Java编译错误:需要class,interface或enum

    【Java】Java编译错误:需要class,interface或enum1.源代码classFangFaDemo{publicstaticvoidmain(String[]args){intx=1,y=2;System.out.println(sum(x,y));}}publicstaticintsum(inta,intb){returna+b;}…

    2022年6月8日
    65
  • 计算机网络ip地址划分方法,ip地址怎么划分 ip地址划分方法【图文】

    计算机网络ip地址划分方法,ip地址怎么划分 ip地址划分方法【图文】IP地址指的是互联网的协议地址,它的全称为IPAddress,IP地址是IP协议当中的一种地址格式,互联网上的任意一个网络以及它们的主机使用的逻辑地址都是由IP地址分配的,那么你知道IP地址是怎样进行划分的吗?下面我们就一起来看看IP地址的划分以及IP地址的查询方法吧。一、IP地址的划分:IP地址一个包括五大类,分别是A类IP地址、B类IP地址、C类IP地址、D类IP地址和E类IP地址。其中A类…

    2022年6月9日
    33
  • java 字符串和整型的相互转换_java字符串转整型数组

    java 字符串和整型的相互转换_java字符串转整型数组Java中字符串转整型和整型转字符串1.字符串转整型Java代码,字符串为纯数字的情况下,调用Integer的静态方法parseInt或者valueOfJava代码,如果单个字符或字符串,需要切开转化为char字符再转化,否则按照上述方法会出现空指针异常(ASCLL码0:**48**a:**97**A:**65**)2.整型转字符串Java代码,3种方法1.字符串转整型Java代码,字符串为纯数字的情况下,调用Integer的静态方法parseInt或者valueOfpublicclass

    2022年10月9日
    3
  • 关于安装Maven以及环境变量的配置完整教程[通俗易懂]

    关于安装Maven以及环境变量的配置完整教程[通俗易懂]Maven项目对象模型(POM),可以通过一小段描述信息来管理项目的构建,报告和文档的项目管理工具软件。一、安装1.官网安装地址:Maven–WelcometoApacheMaven2.点击Download3.下载后解压产生此文件夹4.文件夹如图所示二、环境变量配置点击我的电脑->属性->高级系统设置->环境变量新建两个环境变量2.新建:M2_HOME内容:maven的bin目录(这里看大家安装的路径,………

    2022年7月24日
    9
  • navicate 15 激活码【注册码】

    navicate 15 激活码【注册码】,https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月18日
    57
  • Python在线编译器 C语言在线编译器

    Python在线编译器 C语言在线编译器Python在线编译器C语言在线编译器

    2022年7月5日
    27

发表回复

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

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