單例對象的lua實現

來源:互聯網
上載者:User

        前幾天看了雲風大俠用lua寫的OOP模板,膜拜不已,用這個模板會讓人誤以為lua是顯式支援OOP的,而感覺不到這是用lua現成的文法寫就的模板。

        不過個人還是抗拒用這個模板,因為一旦用這個模板實現OOP,就沒法控制一些細節。儘管可以擴充這個模板,但總不如自己寫的元表靈活。比如,這個模板不支援單例對象。

        單例是一種很有用的設計模式。在OOP中會發現,在商務邏輯或是程式邏輯上,有些類別至多存在一個對象,那麼就最好運用單例對象。在c++,objc等語言中,通常通過靜態變數實現單例對象;lua中沒有“靜態”這一概念,因此可通過全域變數替代靜態變數的作用。

        通過元表的OOP方法,結合全域變數,可以很方便地實現單例對象:

Hello = {}</p><p>function Hello:instance()<br /> local o = _G.Hello<br /> if o then return o end</p><p> o = {}<br /> _G.Hello = o<br /> setmetatable(o, self)<br /> self.__index = self<br /> return o<br />end</p><p>function Hello:clear()<br /> _G.Hello = false<br />end

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.