工廠模式與內存分配之間的聯繫

一、什麼是工廠模式

  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);
  2. 上述代碼執行後:
    圖片描述
  3. 代碼分析:

    (1)代碼中輸出了兩個對象,分部是$obj1和$obj2,輸出了一次construct中的數字,兩個對象編號一樣
    (2)由此可見,工廠模式可以做到一點,就是隻new一次對象

二、對象在內存中是如何分配的呢?

  1. 內存從分配角度大體可以分爲四種類型:棧空間段、堆空間段、代碼段、初始化靜態段。
  2. 棧空間段是存儲佔用相同空間長度並且佔用空間較小的數據類型的地方,比如說整型1,10,100,1000,10000,100000 等等,在內存裏面佔用空間是等長的,都是64 位4 個字節。
  3. 堆空間段是存儲數據長度不定且佔用空間較大的數據類型,例如對象。
  4. 代碼段是存儲執行程序代碼本身的地方。
  5. 數據段是存儲初始化且不爲0的全局變量,如靜態變量和常量。
  6. 內存分配圖示:
    圖片描述
  7. 棧內存是可以直接存取的,而堆內存不可以直接存取。
  8. 對於我們的對象來說就是一種大的數據類型而且是佔用空間不定長的類型,所以說對象本身是放在堆裏面的,但對象名稱是放在棧裏面的,這樣通過對象名稱就可以使用對象了
  9. 對象圖示:
    圖片描述
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章