当前位置: 首页 > news >正文

PHP设计模式-简单工厂模式

核心:

        一、定义一个接口类里面写规定好的方法。

                

 interface Message{public function send(array $params);public function getMessage(array $params);public function getCode(array $params);}


        二、定义产品类 、产品类继承接口类 

                

    class AlliYunSms implements Message{public function send(array $params){return '发送短信';}public function getMessage(array $params){return '短信内容';}public function getCode(array $params){return '短信验证码';}}class QQSms implements Message{public function send(array $params){return '发送短信';}public function getMessage(array $params){return '短信内容';}public function getCode(array $params){return '短信验证码';}}class BaiduSms implements Message{public function send(array $params){return '发送短信';}public function getMessage(array $params){return '短信内容';}public function getCode(array $params){return '短信验证码';}}

     

        三、编写工厂类实现业务

    class SmsFactory{public $service=['aliyun' => AlliYunSms::class,'qq'     => QQSms::class,'baidu'  => BaiduSms::class];public $MsgService;public function __construct($type){if(!isset($this->service[$type])){throw new \Exception('短信服务不存在');}$this->MsgService = $this->service[$type];}public static function create(string $type){$class = __NAMESPACE__.'\\'.$type.'Sms';return new $class();}public  function send(array $params){$this->MsgService->send($params);//业务逻辑return '发送成功';}}$service=new SmsFactory('aliyun');$service->send(['name'=>'thinkphp'])

总结

大家有更好的写法请欢迎讨论

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 【Apache Doris】数据副本问题排查指南
  • StarryCoding-35:鼠鼠我鸭
  • C语言开关迷宫
  • 物理机 gogs+jenkins+sonarqube 实现CI/CD
  • Ubuntu转竖屏,文件解锁和查看mac地址命令记录
  • 力扣141环形链表问题|快慢指针算法详细推理,判断链表是否有环|龟兔赛跑算法
  • ECCV2024|LightenDiffusion 超越现有无监督方法,引领低光图像增强新纪元!
  • Jsoup爬虫——自学习梳理
  • Connecting weaviate with langflow across docker containers
  • 【OpenCV C++20 学习笔记】调节图片对比度和亮度(像素变换)
  • STM32-寄存器DMA配置指南
  • Web响应式设计———1、Grid布局
  • 算法学习笔记(8.8)-多重背包
  • 【运维笔记】数据库无法启动,数据库炸后备份恢复数据
  • 深入理解JS中的发布订阅模式和观察者模式
  • ES6指北【2】—— 箭头函数
  • 77. Combinations
  • Android组件 - 收藏集 - 掘金
  • docker容器内的网络抓包
  • Essential Studio for ASP.NET Web Forms 2017 v2,新增自定义树形网格工具栏
  • flutter的key在widget list的作用以及必要性
  • JavaScript-Array类型
  • Java教程_软件开发基础
  • LeetCode刷题——29. Divide Two Integers(Part 1靠自己)
  • puppeteer stop redirect 的正确姿势及 net::ERR_FAILED 的解决
  • uni-app项目数字滚动
  • vue+element后台管理系统,从后端获取路由表,并正常渲染
  • 闭包--闭包之tab栏切换(四)
  • 后端_MYSQL
  • 盘点那些不知名却常用的 Git 操作
  • 实战:基于Spring Boot快速开发RESTful风格API接口
  • 使用parted解决大于2T的磁盘分区
  • 微信开源mars源码分析1—上层samples分析
  • 写给高年级小学生看的《Bash 指南》
  • 找一份好的前端工作,起点很重要
  • 白色的风信子
  • ​学习一下,什么是预包装食品?​
  • (c语言+数据结构链表)项目:贪吃蛇
  • (Matalb回归预测)PSO-BP粒子群算法优化BP神经网络的多维回归预测
  • (板子)A* astar算法,AcWing第k短路+八数码 带注释
  • (附源码)基于SpringBoot和Vue的厨到家服务平台的设计与实现 毕业设计 063133
  • (附源码)计算机毕业设计ssm本地美食推荐平台
  • (考研湖科大教书匠计算机网络)第一章概述-第五节1:计算机网络体系结构之分层思想和举例
  • (论文阅读11/100)Fast R-CNN
  • (亲测成功)在centos7.5上安装kvm,通过VNC远程连接并创建多台ubuntu虚拟机(ubuntu server版本)...
  • (源码版)2024美国大学生数学建模E题财产保险的可持续模型详解思路+具体代码季节性时序预测SARIMA天气预测建模
  • (转)EXC_BREAKPOINT僵尸错误
  • (转)jQuery 基础
  • .ai域名是什么后缀?
  • .bat批处理(八):各种形式的变量%0、%i、%%i、var、%var%、!var!的含义和区别
  • .NET 3.0 Framework已经被添加到WindowUpdate
  • .net framework4与其client profile版本的区别
  • .net websocket 获取http登录的用户_如何解密浏览器的登录密码?获取浏览器内用户信息?...
  • .NET 发展历程
  • .Net7 环境安装配置