設計模式的單一模式,算是所有設計模式的第一堂課
因為其他的模式也會使用到這個。
為什麼要用單一模式呢?
好比你有個資料需要整個flash去共享,例如一份XML文件
在這種情況下, 不需要浪費資源的去建構二個URLLoader載入同一份XML
或是要建立一個共享的廣播者, 都需要使用Singleton來避免物件被建構二次
那為什麼不用靜態屬性就好了呢? ,反正都是單一呀
1:靜態成員無法繼承。
2:資源浪費, Singleton使用的是被動式初始化, 只有當使用者呼叫getInstance時才會被建構,
而靜態成員則是預先初始化。
建立Singleton類別。
因為其他的模式也會使用到這個。
為什麼要用單一模式呢?
好比你有個資料需要整個flash去共享,例如一份XML文件
在這種情況下, 不需要浪費資源的去建構二個URLLoader載入同一份XML
或是要建立一個共享的廣播者, 都需要使用Singleton來避免物件被建構二次
那為什麼不用靜態屬性就好了呢? ,反正都是單一呀
1:靜態成員無法繼承。
2:資源浪費, Singleton使用的是被動式初始化, 只有當使用者呼叫getInstance時才會被建構,
而靜態成員則是預先初始化。
建立Singleton類別。
package { public class MilkmidiSingleton { private static var _instance:MilkmidiSingleton; public var myID:int = 0; //建立公開的屬性。 public function MilkmidiSingleton(pSingletonEnforcer:SingletonEnforcer) { if (pSingletonEnforcer == null) throw new Error("Singleton"); } public static function getInstance():MilkmidiSingleton { if (MilkmidiSingleton._instance == null) { //當_instance屬性為null時,才建檔該物件。 MilkmidiSingleton._instance = new MilkmidiSingleton(new SingletonEnforcer()); //在建構函式時, 傳入internal類別, 避免其他類別使用new MilkmidiSingleton()來建構。 } return MilkmidiSingleton._instance; } public function doAction():void { trace("MilkmidiSingleton doAction"); } } } internal class SingletonEnforcer { }測試使用:
package { import flash.display.Sprite; import MilkmidiSingleton; public class SingletonDemo extends Sprite { public function SingletonDemo() { MilkmidiSingleton.getInstance().doAction(); //要使用該類別的時候, 不是採用 new來建構 //而是使用類別的靜態方法getInstance(),來確保得到唯一的物件。 trace(MilkmidiSingleton.getInstance().myID); } } }
留言
DisplayObject.prototype._root=root as MovieClip;
直接設一個root movieclip,
好用^^
但有可能會被復寫呀
還是盡量不要用prototype比較好
為什麼呢?
想一想, 衛星聽起來比較像observer後!
那我把Singleton解譯成
大明星
他的一舉一動, 都會受到注意
但沒興趣的人對他的動作都不會在意
感覺近在咫尺, 卻又不知他人在那兒
如果在flash下寫mvc的架構,除了model要設成singleton之外,是不是還要繼承EventDispatcher呢?
不然大明星的一舉一動,要怎麼受到注意呢?
但一定要是extends EventDispatcher
不然大明星就不會曝光。