`
hereson
  • 浏览: 1427541 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

AS3与设计模式Singleton Pattern (单例模式)

阅读更多

今天看到了 N神AS研究所的文章【AS3设计模式】 Singleton Pattern (单例模式)http://www.nshen.net/blog/article.asp?id=511;

感觉非常有用,使用了一下,主要在存数据的上面还有些不明白,通过研究,自己找到了一中方法.

改写了其中 singleton 类:
_____________start_______________

package singleton
{
public class Singleton
{
   private static var _instance:Singleton;
   private var singletonInstance:SingletonEnforcer;

      public function Singleton(singletonEnforcer:SingletonEnforcer) {
       if(singletonEnforcer==null){
     throw new Error("singletonEnforcer");
    } else {
     singletonInstance = singletonEnforcer;
    }
      }

      public static function getInstance():Singleton {
         if(Singleton._instance == null) {
            Singleton._instance = new Singleton(new SingletonEnforcer());
         }
         return Singleton._instance;
      }

      public function doSomething():void {
   trace(singletonInstance.gogo());
         trace("SOMETHING!");
      }

}
}
class SingletonEnforcer {
private var holy:int = 1;
public function gogo():int{
   holy++;
   return holy;
}
}

__________________end_____________

其中 Designpatterns类不变:
_____________start_______________

package {
import flash.display.Sprite;
    import Singleton;
public class Designpatterns extends Sprite
{
   public function Designpatterns()
   {
  
    Test_Singleton()
  
   }
  
   public function Test_Singleton():void{
    var s:Singleton=Singleton.getInstance()
    s.doSomething();
    /*
    使用构造函数创建实例会报错
    var s1:Singleton=new Singleton()
    s1.doSomething()
    */
   }
  
}
}

__________________end_____________

这是个人想法,不知道其他应用者是怎么实现的..

 

转自:http://hi.baidu.com/moubang/blog/item/d6e64d2ad14aec98023bf62b.html

 

********author:ycccc8202**********3.0的单例模式*************/
package {
import flash.display.Sprite;
public class SingletonExample extends Sprite
{
public function SingletonExample()
{
var single1:Singleton=Singleton.getInstance()
var single2:Singleton=Singleton.getInstance()
trace(single1==single2)
try{
var single:Singleton=new Singleton()}
catch(e:Error){
trace(e)}
}
}
}
class Singleton
{
private static var __INSTANCE:Singleton
private static var __ALLOW:Boolean=false
public function Singleton(){
if(__ALLOW==false){
throw new Error("不能通过new创建实例!");
}
return;
}
public static function getInstance():Singleton{
if(__INSTANCE==null){
__ALLOW=true
__INSTANCE=new Singleton()
__ALLOW=false
}
return __INSTANCE
}
}
/**************************************************/
/****AS3主要是由于构造函数必须为public,所以用throw进行了设置****/

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics