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


相关推荐

  • MariaDB安装教程(保姆级)

    MariaDB安装教程(保姆级)Maria的详细下载过程

    2022年6月12日
    134
  • 应用程序发生异常0xc0000095_0xc0000142

    应用程序发生异常0xc0000095_0xc0000142Hi,Imadeanexewhichisforsystemtray,thisexetogetsystemeventnotificationas(logoff&Shutdown)..itsworkingfinefor1-2hoursbutafterthatthisexeisgoingtocrashIamunable…

    2022年9月28日
    6
  • 深入理解拉格朗日乘子法(Lagrange Multiplier) 和KKT条件「建议收藏」

    深入理解拉格朗日乘子法(Lagrange Multiplier) 和KKT条件「建议收藏」在求解最优化问题中,拉格朗日乘子法(LagrangeMultiplier)和KKT(KarushKuhnTucker)条件是两种最常用的方法。在有等式约束时使用拉格朗日乘子法,在有不等约束时使用KKT条件。  我们这里提到的最优化问题通常是指对于给定的某一函数,求其在指定作用域上的全局最小值(因为最小值与最大值可以很容易转化,即最大值问题可以转化成最小值问题)。提到KKT条件一般会附带的…

    2022年10月8日
    5
  • iis 启动不了,提示发生意外错误0x8ffe2740 解决最好方法 心得

    iis 启动不了,提示发生意外错误0x8ffe2740 解决最好方法 心得最近总出来两个错误1。每次启动IIS时,总报 “外错误0x8ffe2740 ”2。打开Vs.net2003时,又出来什么目前Asp.net不是1.1什么的。总之不能运行。查www.google.com发现  IIS的错误是因为80端口被占用的缘故。网上侠客,只是说先改IIS的端口。解决最好方法:A)我用“FPort.exe”找到占用端口的程序。B)然后将它

    2022年7月13日
    22
  • python和java哪个更值得学 知乎_学完python再学java

    python和java哪个更值得学 知乎_学完python再学java​在编程界经常会引发一个讨论,就是python和Java哪个更值得学,Java语言具有跨平台的特性,在应用范围上有许多选择的余地,而Python在这几年的火热程度丝毫没有减退。个人观点,看学习的目的

    2025年6月19日
    3
  • (详解)IDEA中使用git教程

    (详解)IDEA中使用git教程前言最近学习了一下VCS(VersionControlSystem),这里我选择的是Git而不是SVN,因为Git在本地磁盘上就保留着所有当前项目的历史更新,所以处理起来速度飞快,这是使用空间换时间的处理方式。使用Git,即使在没有网络或VPN的情况下,你同样可以非常愉快的频繁提交更新到本地仓库,等到有了网络的时候再提交到远程的仓库(百度百科)。1.IDEA安装GitIDEA虽然集成…

    2022年6月28日
    83

发表回复

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

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