關於Actionscript 3.0中Singleton實現-----修正篇

         關於Actionscript 3.0中Singleton實現-----修正篇

  說明:上一篇"一個簡單的Actionscript的單態模式類"的實現在Actionscript中報錯,具體原因會在這篇Blog中詳細說明。

  在前面的blog中,代碼如下:

   Rebuild會出現1153:A constructor can only be declared public.錯誤,錯誤原因在錯誤描述語句描述的很清楚,也就是Constructor在Actionscript中只能聲明爲public。而我當時寫的時候,犯了習慣性的錯誤,因爲我學習的C++和C#中寫singleton pattern總是將constructor聲明爲protected或者private,所以也就"理所當然"地這樣寫了(還是應該好好重視每種編程語言的基礎,雖然都是標準的OO語言,但應該還是各有自己的特色的,不然也就沒吸引力了)。既然這樣,我們就無法保證用戶不用new來創建singleton class對象了,在我思考中,同QQ羣上一位網友討論了哈,他給我推薦了一種解決方案,如下:

   但後來通過自己的測試,發現這樣是不行的,Actionscript的異常機制貌似跟C#和C++不同,其實還是創建了對象,即使拋出了Exception(當然我沒有很深入的測試,也許結果並不正確,但這裏我要推薦另一種在Actionscript中實現singleton pattern的方法)。後來自己在網上找到一本好書《Advanced Actionscript 3 with Design Pattern》,在它的Part III中的Chapter 4中找到了關於Actionscript中singleton的討論。

   由於我們沒法把constructor聲明爲private,那就可以給constructor傳遞一個private的variable,同樣可以達到不能new的目的。但是怎麼樣才能讓一個只對singleton class有private作用域的variable呢,我們要注意Actionscript的一些規則,比如在一個AS文件中只能有一個Package,一個和AS文件同名的Main Class。但我們在AS文件的包外聲明一個class,而且這樣聲明的class只對package中的class有作用域,對包外是不可見的。所以可以如下來寫這個Singleton class:

 

     BTW: 順便附上一張電子書中關於Actionscript 3中Singleton Pattern Class講解的照片,如下:

Actionscript 3 Singleton Pattern Class

<script src="http://s.vdoing.com/u/107/54977.js" type="text/javascript"></script>

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章