PHP单例模式和工厂模式用法实例详解

详解PHP中的工厂模式实践 简介:工厂模式是设计模式中的一种创建型模式,通过抽象对象创建过程,降低系统耦合度,提高代码的可扩展性和可维护性。本文详细探讨了PHP中工厂模式的实现,包括其概念、角色、实现方式、优点以及适用场景。实例代码展示了如何通过工厂接口创建不同类型的具体产品。 阅读详情
设计模式是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。

毫无疑问,设计模式于己于他人于系统都是多赢的;设计模式使代码编制真正工程化;设计模式是软件工程的基石脉络,如同大厦的结构一样。

单例模式
当需要保证某个对象只能有一个实例的时候,单例模式非常有用。它把创建对象的控制权委托到一个单一的点上,任何时候应用程序都只会仅有一个实例存在。单例类不应该可以在类的外部进行实例化一个单例类应该具备以下几个要素。
必须拥有一个访问级别为 private 的构造函数,有效防止类被随意实例化。
必须拥有一个保存类的实例的静态变量。
必须拥有一个访问这个实例的公共的静态方法,该方法通常被命名为 GetInstance()。
必须拥有一个私有的空的clone方法,防止实例被克隆复制。
下面用一个简单的单例类的例子来说明
  1. class ClassName
  2. {
  3.     public static $_instance;
  4.     private function construct()
  5.     {
  6.         # code...
  7.     }
  8.    private function clone()
  9.     {
  10.         # empty
  11.     }
  12.     public static function GetInstance()
  13.     {
  14.         if(!(self::$_instance instanceof self))
  15.         {
  16.             self::$_instance = new self();
  17.         }
  18.         return self::$_instance;
  19.     }
  20.     public function SayHi()
  21.     {
  22.         echo "Hi boy!";
  23.     }
  24. }
  25. $App= ClassName::GetInstance();
  26. $App->SayHi();
  27. /**
  28.  *
  29.  * Output
  30.  *
  31.  * Hi boy!
  32.  *
  33.  */
复制代码
简单工厂模式
当你有大量的实现同一接口的类的时候,在合适的时候实例化合适的类,如果把这些 new 分散到项目的各个角落,不仅会使业务逻辑变的混乱并且使得项目难以维护。这时候如果引进工厂模式的概念,就能很好的处理这个问题。我们还可以通过应用程序配置或者提供参数的形式让工厂类为我们返回合适的的实例。
工厂类,它把实例化类的过程放到各工厂类里头,专门用来创建其他类的对象。工厂模式往往配合接口一起使用,这样应用程序就不必要知道这些被实例化的类的具体细节,只要知道工厂返回的是支持某个接口的类可以很方便的使用了。下面简单举例说明下工厂类的使用。
  1. interface ProductInterface
  2. {
  3.     public function showProductInfo();
  4. }
  5. class ProductA implements ProductInterface
  6. {
  7.     function showProductInfo()
  8.     {
  9.         echo 'This is product A.';
  10.     }
  11. }
  12. class ProductB implements ProductInterface
  13. {
  14.     function showProductInfo()
  15.     {
  16.         echo 'This is product B.';
  17.     }
  18. }
  19. class ProductFactory
  20. {
  21.     public static function factory($ProductType)
  22.     {       
  23.         $ProductType = 'Product' . strtoupper($ProductType);
  24.         if(class_exists($ProductType))
  25.         {
  26.             return new $ProductType();
  27.         }
  28.         else
  29.         {
  30.             throw new Exception("Error Processing Request", 1);
  31.         }
  32.     }
  33. }
  34. //这里需要一个产品型号为 A 的对象
  35. $x = ProductFactory::factory('A');
  36. $x -> showProductInfo();
  37. //这里需要一个产品型号为 B 的对象
  38. $o = ProductFactory::factory('B');
  39. $o -> showProductInfo();
  40. //都可以调用showProductInfo方法,因为都实现了接口 ProductInterface.
复制代码
小结
模式就像是软件工程的基石脉络像大厦的设计图纸一样,这里接触了两种模式:单例模式和工程模式。单例类中存在一个静态变量保存着自身的一个实例,并且提供了获取这个静态变量的静态方法。单例类还应该把构造函数和clone函数标记为私有的,防止破换实例的唯一性。工厂模式根据传入的参数或程序的配置来创建不同的类型实例,工厂类返回的是对象,工厂类在多态性编程实践中是至关重要的。
php单例模式和工厂模式 php单例模式php单例模式php单例模式php单例模式 立即下载

相关推荐

数据质量管理的一些思考

背景 在近期的项目当中,我们为客户落地实施了数据资产平台。随后,在数据平台中接入了客户子公司的一个业务系统的明细数据。客户希望在我们的数据平台上通过数据探索和数据分析,来挖掘一些业务价值和业务创新点。 当我们拿到数据开始进行一些初步探索的时候,发现导入平台的数据质量存在一定的问题:例如一些用于数据分析的关键字段的值为空、一些本应该有主从关系的数据对应不上、数据分类混乱等。这些问题直接影响到了对...

IDEAL Garden 1万+

PHP 面向对象编程和设计模式 (3/5) - 单例模式和工厂模式

PHP高级程序设计 学习笔记 2014.06.11 设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。 毫无疑问,设计模式于己于他人于系统都是多赢的;设计模式使代码编制真正工程化;设计模式是软件工程的基石脉络,如同大厦的结构一样。 单例模式 当需要保证某个对象只能有...

weixin_30279751的博客 265

NXP KW47蓝牙MCU低功耗实测:从8μA睡眠到5年续航的优化实战

在物联网和嵌入式系统开发中,低功耗设计是决定电池供电设备续航能力的关键技术。其核心原理在于通过事件驱动、状态机管理和精细的电源域控制,使设备在空闲时进入深度睡眠,仅在需要时快速唤醒工作,从而将平均电流从毫安级降至微安级。这项技术的工程价值在于能够实现纽扣电池供电设备长达数年的使用寿命,广泛应用于智能家居传感器、可穿戴设备、资产追踪和工业监测等领域。以NXP KW47系列无线MCU为例,其集成的Arm Cortex-M33双核与专用射频单元,配合多级睡眠模式和高效DC-DC转换器,为超低功耗蓝牙应用提供了硬件

weixin_30162121的博客 257

PHP 单例模式和工厂模式

为什么要用单例模式? php常常和数据库打交道,如果在应用中如果频繁建立连接对象,进行new操作的话,会消耗大料的系统内存资源,这并不是我们希望看到的。再则,在团队合作项目中,单例模式可以有效避免不同程序员new自己的对象,造成人为的系统消耗。 单例模式又称为职责模式,它用来在程序中创建一个单一功能的访问点,通俗地说就是实例化出来的对象是唯一的。 所有的单例模式至少拥有以下三种...

Miss Dan的博客 693

python画弗里德曼(Friedman) 检验和秩和检验(Nemenyi)检验图

python画弗里德曼(Friedman) 检验和秩和检验(Nemenyi)检验图 画好后效果图 实现代码如下 import matplotlib.pyplot as plt #算法平均排名 _alg_=[1.405,2.643,2.786,2.167] y=[1,2,3,4]#alg1,alg2,alg3,alg4 通过Nemenyi测试计算得到的临界值CD CD=1.024 h_CD=CD/2 plt.figure(figsize=(10,6)) plt.scatter(_alg_,y,s=10

大模型天花板 4465

在SAP系统中,公司间关联交易(Intercompany Transactions)或内部往来主要有三种经典的实现模式。这些模式的选择取决于企业的业务复杂度、自动化需求以及对实时性的要求

SAP系统中公司间关联交易的三种实现模式分析:1)手工记账模式(FB60/FB70)适用于低频交易,灵活性高但易出错;2)SD/MM跨公司销售采购模式(VA01/VF01/ME21N)适用于真实业务流转,业务财务集成度高;3)自动清算模式(F.13/ICR)适合高频交易集团企业,支持实时自动对账。关键成功要素包括正确配置贸易伙伴字段、统驭科目及专用凭证类型。建议根据企业规模、业务复杂度及自动化需求选择合适模式,其中大型集团优先考虑自动对账方案以确保合并报表准确性。

金牌架构师 555

PHP面向对象 - 设计模式(单例,简单工厂,工厂方法)

php面向对象设计模式,单例模式,简单工厂模式,工厂方法模式学习讲解

weixin_43781276的博客 480

基于STM32的IMU惯性/姿态解算与多参数上位机可视化实现_资料编号38

本项目实现基于STM32F103C8T6标准库,对姿态/惯性(IMU)传感器姿态解算,通过USB-TTL转串口模块将姿态角/欧拉角、加速度、角速度、磁场、气压、海拔高度、磁力计温度、气压计温度等数据显示在PC端上位机,系统采用可充电锂电池供电。

嵌入式阿齐Archie 1万+

PHP工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。

工厂方法模式是一种创建型设计模式,它通过定义一个用于创建对象的接口,但由子类决定实例化哪一个类。核心思想:将对象的创建延迟到子类。抽象工厂模式是一种创建型设计模式,它提供了一个接口,用于创建相关或依赖对象的家族,而无需指定具体类。单例模式是一种创建型设计模式,确保一个类只有一个实例,并提供一个全局访问点。建造者模式是一种创建型设计模式,用于构建复杂对象,允许分步骤创建对象并隐藏其内部细节。原型模式是一种创建型设计模式,通过克隆现有对象来创建新对象,避免重复初始化。

长风破浪会有时的博客 1517

【Java核心高阶进阶】44-Java8核心新特性

模块十:Java新特性演进 · 第 1 篇Java 8 是 Java 语言历史上最重要的一次发布,它引入的函数式编程范式从根本上改变了 Java 的编码方式。即便到了 JDK 21 的今天,Lambda、Stream、Optional 仍是日常开发的高频工具。本篇将深入这些特性的语法、原理与底层机制,帮助你不仅会用,更知其所以然。

gaochufukanyongren的博客 24

从0开始学PHP面向对象内容之常用设计模式(单例,工厂)

工厂模式是最常用的设计模式之一,它通过解耦对象创建过程和使用过程,提高了代码的灵活性和可维护性。在实际应用中,选择哪种工厂模式取决于对象创建的复杂度和扩展性需求。使用场景对比。

学习者小高 1028

tsmc12:via0的spacing问题(Via0.S.1)

12nm有个via0 grid的概念,除了普通fill外,基本都有via0这一层,这一层需要与via0 grid对齐。手动调整cell的位置比较容易出这个drc,比如修m0po max length drc时。解决方法1: 替换EEQV类型cell,这种类型是专门为了修via0 Grid问题存在的。更多学习内容请关注「拾陆楼」知识星球。解决方法2: 翻转或移动。

m0_61544122的博客 1115

PHP单例模式和工厂模式用法实例详解-简单易懂

设计模式是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。毫无疑问,设计模式于己于他人于系统都是多赢的;设计模式使代码编制真正工程化;设计模式是软件工程的基石脉络,如同大厦的结构一样。单例模式当需要保证某个对象只能有一个实例的时候,单例模式非常有用。它把创建对象的控制权委托到一个单一的点上,任何时候应用程序都只...

投资自己 1206

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

PHP设计模式之 单例模式 工厂模式 实例讲解

  单例模式又称为职责模式,它用来在程序中创建一个单一功能的访问点,通俗地说就是实例化出来的对象是唯一的。所有的单例模式至少拥有以下三种公共元素:1. 它们必须拥有一个构造函数,并且必须被标记为private2. 它们拥有一个保存类的实例的静态成员变量3. 它们拥有一个访问这个实例的公共的静态方法单例类不能再其它类中直接实例化,只能被其自身实例化。它不会创建实例副本,而是会向单例类内部存...

weixin_30247159的博客 154

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

工厂模式、单例模式、策略模式、适配器模式、观察者模式的原理和使用详解

学好设计模式,让你的逻辑活起来

国内某知名游戏公司小菜鸡工程师 2154

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

PHP设计模式之单例模式与工厂模式

PHP单例模式,就是一个对象只被生成一次,但该对象可以被其它众多对象使用。单例模式使用最多的场景,是数据库连接操作。我们知道,生成一个对象的操作是用new函数来实现,但是new对象都会消耗内存,而且有时候对同一个对象,在不同文件中可能会生成多次,这就造成了系统资源的浪费。然而使用单例模式,则可以很好的避免这种情况。 以数据库为例,假设我们有一个数据库的类,要实现数据库连接。如果不使用单例模式,那...

stand_forever的博客 1157

设计模式 - 单例模式与工厂模式

应用于编码, 高可扩展程序的编码设计实现,以及用于面试。

"代码"的日常搬运 4555

php手写工厂和单例模式,详解PHP设计模式中工厂模式和单例模式

PHP设计模式之工厂模式与单例模式本文实例讲述了PHP设计模式之工厂模式与单例模式实现方法。分享给大家供大家参考,具体如下:设计模式简单说应对某类问题而设计的解决方式工厂模式:应对需求创建相应的对象class factory{function __construct($name){if(file_exists('./'.$name.'.class.php')){return new $name;}...

weixin_35509069的博客 229

php工厂模式和单例模式区别,php工厂模式和单例模式区别

php工厂模式和单例模式区别单例模式:防止重复实例化,避免大量的new操作,减少消耗系统和内存的资源,使得有且仅有一个实例对象header("Content-type: text/html; charset=utf-8"); //定义字符编码,防止乱码/*** 单利类*/class Single{private static $_instance; //保存实例的对象private func...

weixin_33014843的博客 439

php使用单例和工厂模式,PHP实例:PHP中单例模式与工厂模式详解

《PHP实例:PHP中单例模式与工厂模式详解》要点:本文介绍了PHP实例:PHP中单例模式与工厂模式详解,希望对您有用。如果有疑问,可以联系我们。单例模式概念PHP实战单例模式是指整个应用中类只有一个对象实例的设计模式.PHP实战单例模式的特点PHP实战一个类在整个应用中只有一个实例PHP实战类必须自行创建这个实例PHP实战必须自行向整个系统提供这个实例PHP实战php中使用单例模式的原因PHP实...

weixin_32821533的博客 249

单例模式 工厂模式 观察者模式

单例模式 单例模式确保某个类只有一个实例,而且自行实例化并向整个系统提供这个实例。 单例模式是一种常见的设计模式,在计算机系统中,线程池、缓存、日志对象、对话框、打印机、数据库操作、显卡的驱动程序常被设计成单例。 单例模式分3种:懒汉式单例、饿汉式单例、登记式单例。 单例模式有以下3个特点: 1.只能有一个实例。 2.必须自行创建这个实例。 3.必须给其他对象提供这一实例。 那么为什么要使用PHP单例模式? PHP一个主要应用场合就是应用程序与数据库打交道的场景,在一个应用中会存在大量的数

JineD的博客 9225

php手写工厂和单例模式,PHP设计模式之工厂模式与单例模式

本文实例讲述了PHP设计模式之工厂模式与单例模式实现方法。分享给大家供大家参考,具体如下:设计模式简单说应对某类问题而设计的解决方式工厂模式:应对需求创建相应的对象class factory{function __construct($name){if(file_exists('./'.$name.'.class.php')){return new $name;}else{die('not exi...

weixin_42513944的博客 114

PHP单例模式和工厂模式

单例模式又称为职责模式,它用来在程序中创建一个单一功能的访问点,通俗地说就是实例化出来的对象是唯一的。 所有的单例模式至少拥有以下三种公共元素: 1. 它们必须拥有一个构造函数,并且必须被标记为private 2. 它们拥有一个保存类的实例的静态成员变量 3. 它们拥有一个访问这个实例的公共的静态方法 单例类不能再其它类中直接实例化,只能被其自身实例化。它不会创建实例副本,而是会向单例类...

lzrit的博客 205

php工厂模式和单例模式,php 设计模式之工厂模式、单例模式、注册树模式

php 设计模式之工厂模式、单例模式、注册树模式在软件工程中,创建型设计模式承担着对象创建的职责,尝试创建适合程序上下文的对象,对象创建设计模式的产生是由于软件工程设计的问题,具体说是向设计中增加复杂度,创建型设计模式解决了程序设计中对象创建的问题。PHP的设计模式有很多种,本文取最简单的三种模式: 工厂模式、单例模式和注册树模式进行简单的讲解。工厂模式用工厂方法或者类生成对象,而不是代码中直接使...

weixin_31076173的博客 210
上一篇: php利用单例模式设计数据库连接Model类
下一篇: 取前一天或后一天、一个月时间
code301
博客等级 码龄9年 87粉丝 78原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值