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

devtools/2024/9/18 12:52:15/ 标签: 设计模式, 简单工厂模式

核心:

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

                

 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'])

总结

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


http://www.ppmy.cn/devtools/85949.html

相关文章

2024非常全的接口测试面试题及参考答案-软件测试工程师没有碰到算我输!

一、前言 接口测试最近几年被炒的火热了,越来越多的测试同行意识到接口测试的重要性。接口测试为什么会如此重要呢? 主要是平常的功能点点点,大家水平都一样,是个人都能点,面试时候如果问你平常在公司怎么测试的&#…

Spock Unit Test in Java

优质博文:IT-BLOG-CN 一、简介 Spock是一个基于Groovy语言的测试和规范框架,使得测试代码更简介,得益于JUnit Runner,Spock兼容大部分IDE和测试框架JUnit/JMock/Powermock等。基于BDD行为驱动开发,功能非常强大。提…

后端返回一个图片链接,前端如何实现下载功能?

纯原创文章,转载请说明来源。 一、背景 要实现一个下载功能,后端直接返回了一个图片的地址https://xxxxx/pic.jpg。如果我们直接通过window.open(url, _blank) 的方式去下载这个图片,会发现 Chrome 浏览器会对这个图片进行预览,…

求职学习day10

总结: 抽空做面试前模拟和拷打八股模拟 面试鸭刷题神器 (mianshiya.com) 贪吃的猴子,滑动窗口,反向思考问题。将左右获取数组转变成中间连续的数组窗口。 滑动窗口3问 左指针什么时候右移,有什么操作右指针什么时候右移&am…

设计模式实战:文件系统的设计与实现

问题描述 设计一个文件系统模拟器,用户可以创建文件和文件夹,对文件进行复制、删除等操作,并支持克隆文件和文件夹。系统需要实现组合模式来处理文件和文件夹的层次结构,使用命令模式来封装操作,并利用原型模式实现文件和文件夹的克隆。 设计分析 组合模式 组合模式用…

《计算机网络》(第8版)第八章 互联网上的音频/视频服务 复习笔记

第八章 互联网上的音频/视频服务 一、概述 1 多媒体信息的特点 多媒体信息(包括声音和图像信息)最主要的两个特点如下: (1)多媒体信息的信息量往往很大; (2)在传输多媒体数据时&am…

git的简单使用

目录 1. 下载,(就不多说了,放个链接吧)2. 简单使用2.1 先创建一个仓库2.2 添加,修改,删除 3. 分支操作3.1 查看分支3.2 创建分支3.3 更换分支3.4 删除分支3.5 合并分支(切换其他分支&#xff0c…

前端获取当前年月日时分秒

getCurrentTime() {//改时间数据格式var currentTime new Date();const formattedDate ${currentTime.getFullYear()}-${this.padZero(currentTime.getMonth() 1)}-${this.padZero(currentTime.getDate())} ${this.padZero(currentTime.getHours())}:${this.padZero(currentTi…

Linux 常用命令分类及示例

目录 文件系统操作进程管理网络工具系统信息文本处理包管理和软件安装 文件系统操作 1. ls 用途: 列出目录内容示例: ls -l 显示当前目录下的文件列表,并包含详细信息。 2. cd 用途: 改变工作目录示例: cd /etc 进入 /etc 目录。 3. mkdir 用途: 创建目录示例…

Ubuntu22.04安装Go语言的几种方式

在 Ubuntu 22.04 上安装 Go 语言可以通过几种不同的方法,以下是两种常见的安装方法: 方法1:使用 go 官方安装脚本 打开终端。 下载 Go 语言的安装脚本: curl -O https://go.dev/dl/go1.22.5.linux-amd64.tar.gz请检查 Go 官方网…

C#判断代码片段为class还是method

判断代码片段是class还是method: public partial class Form1 : Form{public Form1(){InitializeComponent();}private void button1_Click(object sender, EventArgs e){string codeSnippet1 "public class MyClass{bool bfalse;public void MyMethod(…

Windows10系统下使用FileZilla传输文件时,出现“状态: 尝试连接“ECONNREFUSED - 连接被服务器拒绝”失败。错误: 无法连接到服务器”错误,完美解决

文章目录 问题描述原因分析仍然使用ftp服务传输文件解决方案在远程Windows系统配置ftp服务本地电脑使用ftp服务访问远程站点 问题描述 今天使用FileZilla软件使用ftp服务(port:21)连接远程的windows系统时,出现以下错误&#xff…

vue3响应式转换常用API

响应式常用API ref 相关:toRef、toRefs、unRef只读代理:readonly判断相关:isRef、isReactive、isProxy、isReadonly3.3新增API:toValue ref相关 toRef:基于响应式对象的某一个属性,将其转换为 ref 值 i…

昇思25天学习打卡营第22天|Pix2Pix实现图像转换

Pix2Pix图像转换学习总结 概述 Pix2Pix是一种基于条件生成对抗网络(cGAN)的深度学习模型,旨在实现不同图像风格之间的转换,如从语义标签到真实图像、灰度图到彩色图、航拍图到地图等。这一模型由Phillip Isola等人在2017年提出&…

如何为Typescript/Javsscript的类提供优雅的混入(Mixins)功能

混入(Mixins)是一种在多个类之间共享方法的方式,它可以让你在不使用继承的情况下,将一个类的方法添加到另一个类中。然而,尽管混入可以提供一些便利,但它也有一些缺点: 命名冲突:如…

写代码对人的影响

1 代码是需要跑起来的,不能你写了一段代码运行不了 2 代码过程中有大量的bug,经常异常报错,你需要花费时间去解决 对人的影响就是解决问题的态度得到强化,解决问题要比坚持正确困难,坚持正确只是需要自然而然的努力&…

iOS ------ Block的相关问题

Block的定义 Block可以截获局部变量的匿名函数&#xff0c; 是将函数及其执行上下文封装起来的对象。 Block的实现 通过Clang将以下的OC代码转化为C代码 // Clang xcrun -sdk iphoneos clang -arch arm64 -rewrite-objc main.m//main.m #import <Foundation/Foundation.…

网络编程 - 粘包与拆包第一弹 - 深入理解TCP粘包与拆包问题

作者&#xff1a;逍遥Sean 简介&#xff1a;一个主修Java的Web网站\游戏服务器后端开发者 主页&#xff1a;https://blog.csdn.net/Ureliable 觉得博主文章不错的话&#xff0c;可以三连支持一下~ 如有疑问和建议&#xff0c;请私信或评论留言&#xff01; 前言 在网络编程中&a…

56_Redis简单命令

一、引言 1.1 数据库压力过大 由于用户量增大&#xff0c;请求数量也随之增大&#xff0c;数据压力过大 一个请求的url 背后可能有有4-5个 sql的操作 每秒钟 qps&#xff08;并发数&#xff09; 1000 背后的sql操作 4000-5000mysql 单机并发量读写 8000-10000 &#x…

C#知识|文本文件操作:删除、复制、移动文件的操作

哈喽,你好啊,我是雷工! 接下来学习文件的删除和复制,实际应用场景,当软件具有自动在线更新功能时,需要先检测服务器是否具有更新版本的安装包,如果有的话需要将其复制到本地进行升级安装,如果有勾选自动清理安装包功能的话,还可以将安装包删除。 01 删除文件 实现功能…