工厂模式与内存分配之间有什么联系?

青灯夜游
Lepaskan: 2023-04-05 18:12:01
ke hadapan
2122 orang telah melayarinya

本篇文章给大家带来的内容是介绍工厂模式与内存分配,以及工厂模式与内存分配之间的联系。有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。

一、什么是工厂模式

1、工厂模式就是负责生产其他对象的类或方法,常用的工厂模式的一个用法:

<?php
   class ExportIndustryObj{
       public $_obj;

       public function getObj(){
           if(!$this->_obj){
               $this->_obj = new Test();
           }   

           return $this->_obj;
       }   
  }   

  class Test{
       public function __construct(){
           echo 121111;
       }   

  }   


  $industry = new ExportIndustryObj();
  $obj1 = $industry->getObj();
  $obj2 = $industry->getObj();
  var_dump($obj1,$obj2);
Salin selepas log masuk

2、上述代码执行后:

1.png

3、代码分析:

(1)代码中输出了两个对象,分部是$obj1和$obj2,输出了一次construct中的数字,两个对象编号一样
(2)由此可见,工厂模式可以做到一点,就是只new一次对象
Salin selepas log masuk

二、对象在内存中是如何分配的呢?

1、内存从分配角度大体可以分为四种类型:栈空间段、堆空间段、代码段、初始化静态段。

2、栈空间段是存储占用相同空间长度并且占用空间较小的数据类型的地方,比如说整型1,10,100,1000,10000,100000 等等,在内存里面占用空间是等长的,都是64 位4 个字节。

3、堆空间段是存储数据长度不定且占用空间较大的数据类型,例如对象。

4、代码段是存储执行程序代码本身的地方。

5、数据段是存储初始化且不为0的全局变量,如静态变量和常量。

6、内存分配图示:

2.png

7、栈内存是可以直接存取的,而堆内存不可以直接存取。

8、对于我们的对象来说就是一种大的数据类型而且是占用空间不定长的类型,所以说对象本身是放在堆里面的,但对象名称是放在栈里面的,这样通过对象名称就可以使用对象了

9、对象的图示:

3.png

10、上图可以看到,对象名是存在栈中,new了三个person对象,三个具体的对象信息存在堆中。

三、工厂模式与内存分配之间的联系

1、总结起来可以知道,工厂模式就是尽可能的只创建一次对象,从而在堆空间中不用创建重复的对象导致空间浪费,因为堆空间本身是不定长的且空间较大。

2、工厂模式,提取关键词,就是“只new一次对象”、“节省堆空间”。

相关视频教程推荐:《PHP教程

以上就是本篇文章的全部内容,希望能对大家的学习有所帮助。更多精彩内容大家可以关注php中文网相关教程栏目!!!

Atas ialah kandungan terperinci 工厂模式与内存分配之间有什么联系?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:segmentfault.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan