單態模式可以保證一個類只有一個執行個體存在,一般情況下,單態模式可以由以下方式實現:
class Singleton { private static instance:Singleton; private function Singleton(){} public static getInstance():Singleton{ //使用時產生執行個體! if (instance==null) instance=new Singleton(); return instance; }}//使用Singleton.getInstance()可以訪問單態類。
但是ActionScript 3.0不支援私人的建構函式,所以我們要採用其他折衷的方法實現私人的建構函式——包外類。
【包外類】
通常情況下,一個.as類檔案package{}內只可以定義一個類,而且必須與檔案名稱相同,這個類對外是可見的,而在package{}還可以定義多個類,這些類與檔案名稱不同,並且只有當前類檔案的成員類可以訪問,這種類,我們稱為包外類,包外類可以看成當前類的“私人類”。
通過包外類,我們可以採用下面的方法實現單態模式:
package {/** * ... * @author 橡樹小屋 * 單態模式,返回一個音樂播放的執行個體 */public class Tuner{private static var _instance:Tuner;public function Tuner(pvt:privateClass) {}public static function getInstance():Tuner {if (Tuner._instance==null) {Tuner._instance = new Tuner(new privateClass());trace("執行個體化一個tuner執行個體");}return Tuner._instance;}}}//包外類,只有這個包的類可以訪問,其他類檔案無法訪問。實現私人類class privateClass {public function privateClass() {trace("私人類被響應");}}
public function Tuner(pvt:privateClass) {},通過私人類的參數,保證外部不能通過建構函式執行個體化Tuner,因為pvt:privateClass是私人類,外部不能訪問。這樣就可以曲線實現私人的建構函式功能了。
參考資料:《ActionScript 3.0設計模式》《ActionScript 3.0 殿堂之路》