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

php工厂模式

在PHP中,工厂模式是一种创建型设计模式,用于将对象的创建过程封装到一个单独的类(即工厂类)中。通过使用工厂模式,客户端代码不需要知道如何实例化具体的产品类,而是直接与抽象接口或工厂进行交互,从而获得所需产品对象。

以下是一个简单的PHP工厂模式练习示例,我们创建一个工厂来生成不同类型的动物:

1. 首先定义一个抽象的Animal接口或者抽象基类:

// Animal.php
abstract class Animal
{abstract public function makeSound(): string;
}

2. 创建几个实现了Animal接口的具体动物类:

// Dog.php
class Dog extends Animal
{public function makeSound(): string{return "Woof!";}
}// Cat.php
class Cat extends Animal
{public function makeSound(): string{return "Meow!";}
}

3. 现在创建一个工厂类AnimalFactory来根据传入的类型字符串生成对应的动物实例:

// AnimalFactory.php
class AnimalFactory
{public static function createAnimal(string $type): ?Animal{switch ($type) {case 'dog':return new Dog();case 'cat':return new Cat();default:// 当输入不合法时返回null或其他错误处理方式return null;}}
}

4. 在客户端代码中使用工厂来创建动物实例并调用方法:

// client.php
require_once 'Animal.php';
require_once 'Dog.php';
require_once 'Cat.php';
require_once 'AnimalFactory.php';$animalType = 'dog'; // 或从用户输入、配置文件等获取$animal = AnimalFactory::createAnimal($animalType);if ($animal !== null) {echo $animal->makeSound(); // 输出: Woof!
} else {echo "无法创建未知类型的动物";
}

这个练习展示了如何根据传入的不同参数动态地创建不同类型的对象,这就是简单工厂模式的基本应用。当然,在实际项目中,工厂可能更加复杂,包含更多的逻辑和验证步骤。

相关文章:

  • 网络协议与攻击模拟_11DHCP欺骗防护
  • 服务器常遇的响应状态码
  • Linux 驱动开发基础知识—— 具体单板的 LED 驱动程序(五)
  • 代码随想录算法训练营day 23|第六章 二叉树part09
  • Qt 5.9.4 转 Qt 6.6.1 遇到的问题总结(三)
  • 嵌入式Linux学习DAY18---IO编程
  • 正则表达式可视化工具regex-vis
  • 【Android】二级分类双列表联动Demo
  • 【Git】03 图形化工具
  • <网络安全>《15 移动安全管理系统》
  • Android 中的卡顿优化
  • 回归预测 | Matlab实现POA-CNN-LSTM-Attention鹈鹕算法优化卷积长短期记忆网络注意力多变量回归预测(SE注意力机制)
  • OceanBase 4.2.2 GA 发布,全新特性快速预览!
  • 【C++】异常
  • 2024年美国大学生数学建模比赛MCM问题B:搜索潜水器-思路解析与代码解答
  • 【跃迁之路】【444天】程序员高效学习方法论探索系列(实验阶段201-2018.04.25)...
  • Android 架构优化~MVP 架构改造
  • AngularJS指令开发(1)——参数详解
  • Idea+maven+scala构建包并在spark on yarn 运行
  • JavaScript/HTML5图表开发工具JavaScript Charts v3.19.6发布【附下载】
  • Java程序员幽默爆笑锦集
  • PHP CLI应用的调试原理
  • React系列之 Redux 架构模式
  • REST架构的思考
  • 利用阿里云 OSS 搭建私有 Docker 仓库
  • 小程序测试方案初探
  • 小程序开发之路(一)
  • 一个JAVA程序员成长之路分享
  • ​Spring Boot 分片上传文件
  • #13 yum、编译安装与sed命令的使用
  • (70min)字节暑假实习二面(已挂)
  • (Forward) Music Player: From UI Proposal to Code
  • (Redis使用系列) Springboot 使用redis实现接口Api限流 十
  • (阿里巴巴 dubbo,有数据库,可执行 )dubbo zookeeper spring demo
  • (二)什么是Vite——Vite 和 Webpack 区别(冷启动)
  • (附源码)ssm高校运动会管理系统 毕业设计 020419
  • (太强大了) - Linux 性能监控、测试、优化工具
  • (转)Android学习笔记 --- android任务栈和启动模式
  • (转载)虚幻引擎3--【UnrealScript教程】章节一:20.location和rotation
  • **python多态
  • .a文件和.so文件
  • .NET Micro Framework 4.2 beta 源码探析
  • .NET Project Open Day(2011.11.13)
  • .Net+SQL Server企业应用性能优化笔记4——精确查找瓶颈
  • .net使用excel的cells对象没有value方法——学习.net的Excel工作表问题
  • @NoArgsConstructor和@AllArgsConstructor,@Builder
  • @zabbix数据库历史与趋势数据占用优化(mysql存储查询)
  • [ 云计算 | AWS 实践 ] Java 如何重命名 Amazon S3 中的文件和文件夹
  • [04] Android逐帧动画(一)
  • [20190416]完善shared latch测试脚本2.txt
  • [AR]Vumark(下一代条形码)
  • [C#] 基于 yield 语句的迭代器逻辑懒执行
  • [C语言]——C语言常见概念(1)
  • [datastore@cyberfear.com].Elbie、[thekeyishere@cock.li].Elbie勒索病毒数据怎么处理|数据解密恢复
  • [Excel]如何找到非固定空白格數列的條件數據? 以月份報價表單為例