跳转到主内容
新派编程网 - 新潮编程理念,全新技术课堂!

详解PHP之简单工厂模式

本文主要为大家分享一篇详解 php 之简单工厂模式 ,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧。 1.简单工厂的定义 提供一个创建对象实例的功能,而无需关系其具体实现,被创建实例的类型可以是接口、抽象类,也可以是具体的类。 2.简单工厂的结构和说明 立即学习 “ PHP免费学习笔记(深入) ”; 简单工厂的结构如下图: Api: 定义客户所需要的功能接口 Impl: 具体实现Api的实现类,可能会有多个 Factory:  工厂,选择合适的实现类来创建Api接口对象 Client: 客户端,通过Factory 来获取Api接口对象,然后面向Api接口编程 Api接口:
/** * 接口的定义,该接口可以通过简单工厂来创建 * * @author Administrator * */ public interface Api { /** * 具体功能方法的定义 * * @param s * 需要的参数 */ public void operation(String s); }
ImplA:
/** * 接口的具体实现对象A * * @author Administrator * */ public class ImplA implements Api { @Override public void operation(String s) { // 实现的功能 System.out.println("ImplA s==" + s); } }
ImplB:
/** * 接口的具体实现对象B * * @author Administrator * */ public class ImplB implements Api { @Override public void operation(String s) { // 实现的功能 System.out.println("ImplB s==" + s); } }
Factory:
/** * 工厂类,用来创建Api对象 * * @author Administrator * */ public class Factory { /** * 具体创建Api对象的方法 * * @param condition * 从外部传入的选择条件 * @return */ public static Api createApi(int condition) { // 应该根据某些条件去选择究竟创建哪一个具体的实现对象 // 这些条件可以从外部传入,也可以从其他途径获取 // 如果只有一个实现,可以省略条件 Api api = null; if (condition == 1) { api = new ImplA(); } else if (condition == 2) { api = new ImplB(); } return api; } }
测试类Client:
public class Client { public static void main(String[] args) { // 通过简单工厂来获取接口对象 Api api = Factory.createApi(1); api.operation("正在使用简单工厂模式"); } }
简单工厂的调用顺序示意图: 简单工厂的命名建议: 类命名建议为“模块名称+Factory”,比如,用户模块的工厂就称为UserFactory PHP 8.5.5 PHP 8.5.5 是 PHP 8.5 分支的维护更新版本。该版本延续了“小步快跑”的迭代逻辑,通过深度错误修复、底层性能微调以及安全加固,旨在为开发者提供一个更健壮、更高效的运行环境。该版本严格遵守语义化版本规范,不包含破坏性变更。 下载 方法名称通常为“get+接口名称”或者是“create+接口名称”。比如用户接口名称为UserEbi,那么方法名称通常为getUserEbi或者createUserEbi。 简单工厂方法的内部主要实现的功能是“ 选择合适的实现类 ”,选择条件或者是参数的来源通常为一下集中: 来源于客户端,由Client来传入参数 来源于配置文件,从配置文件获取用于判断的值 来源于程序运行期的某个值,比如从缓存中获取某个运行期的值 简单工厂的优点: 帮助封装 简单工厂虽然简单,但是非常友好地帮助我们实现了组件的封装,然后让组件外部能真正面向接口编程。 2. 解耦 通过简单工厂,实现了客户端和具体实现类的解耦。 简单工厂的缺点: 1. 可能增加客户端的复杂度 2.不方便扩展子工厂 简单工厂的本质:选择实现 何时选择简单工厂: 如果想完全封装隔离具体实现,让外部只能通过接口来操作封装体,那么可以选择简单工厂,让客户端通过工厂来获取相应的接口,而无须关心具体的实现。 如果想要把对外创建对象的职责集中管理和控制,可以选择简单工厂。 推荐学习:《 PHP视频教程 》

相关文章