類的設計(靜態類和費靜態類到底怎麼選)

來源:互聯網
上載者:User
因為一些架構的設計經常會看到
DB::get('mall')->where('aaa');
為什麼不能這麼做
DB::get('mall')::where('aaa');

還有一些問題就是通過工廠或者靜態容器生產的對象一般都是費靜態。
比如一個日誌的類,我見過靜態也見過非靜態設計。有點選擇不定

不要跟我講什麼工具類型的最好是靜態,不用new之類的廢話。

回複內容:

因為一些架構的設計經常會看到
DB::get('mall')->where('aaa');
為什麼不能這麼做
DB::get('mall')::where('aaa');

還有一些問題就是通過工廠或者靜態容器生產的對象一般都是費靜態。
比如一個日誌的類,我見過靜態也見過非靜態設計。有點選擇不定

不要跟我講什麼工具類型的最好是靜態,不用new之類的廢話。

首先你要理解一下靜態和非靜態區別。

靜態類,不需要執行個體化就可以使用。這樣的話會有一點點效能提升。

靜態屬性,是所有執行個體都共用的,不管多少執行個體,靜態屬性只有一個。

當然非靜態類如果按照單例的方式來使用,事實上區別並不大。

那如何選擇靜態和非靜態呢?根據每個人對物件導向的理解程度,使用方法都不一樣。

比如日誌。如果一個系統僅存在一個日誌對象,那麼使用靜態類無疑是最好的,不管是調用方法、效能、資料存放區都比較方便。這時候這個日誌對象,你可以把它當成實體物件也可以當成抽象對象來用。

但是如果把日誌細化成使用者行為日誌、資料庫動作記錄、伺服器狀態日誌等等,這時候再把日誌已經是一個抽象的對象了,它需要有實體才能更好的使用。這時候使用非靜態,分別 new 出來會更好一點。因為他們雖然都同屬日誌對象,但是他們卻擁有不同的資料、方法。功能。

所以,我個人理解就是,如果一個類是一個完整的功能模組,不依賴於其他模組,也不需要進行擴充就能完成這個模組的功能,那麼寫成靜態是最好的。
如果一個類僅僅是一個抽象對象,也依賴於其他模組,或者需要進行擴充,或者需要進行繼承等等,那麼還是使用非靜態比較好

  • 其實就是不符合物件導向的設計原則,其實怎麼寫都行

  • 其次,靜態類的不易被回收,像php這類的指令碼語言,指令碼的生命週期一般是指令碼執行完畢就結束了,指令碼所佔用的記憶體理論上就被回收了,所以使用靜態類理論上不存在記憶體回收的問題。但是對於java等,靜態類泛濫的化,就不利於回收記憶體了

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.