• as3 单例的不常见写法


    方法一:(显式允许new一次)

    package 
    {
    	import flash.errors.IllegalOperationError;
    	import flash.events.EventDispatcher;
    	import flash.utils.Dictionary;
    	import flash.utils.getQualifiedClassName;
    
    	public class DT1 extends EventDispatcher
    	{
    		private static var dict:Dictionary = new Dictionary();
    
    		public function DT1()
    		{
    			trace("运行DT1 ");
    			var ref:Class = this["constructor"] as Class;
    			if (dict[ref])
    			{
    				throw new IllegalOperationError((getQualifiedClassName(this) + " 只允许实例化一次!"));
    			}
    			else
    			{
    				dict[ref] = this;
    			}
    		}
    		/**
    		         * 获取单例类,若不存在则创建
    		         * 
    		         * @param ref继承自DT1的类
    		         * @return 
    		         * 
    		         */
    
    		public static function getInstanceOrCreate(ref:Class):*
    		{
    			if (dict[ref] == null)
    			{
    				dict[ref] = new ref();
    			}
    
    			return dict[ref];
    		}
    
    	}
    
    }
    

     方法二:(显式允许new一次)

    package 
    {
    	import flash.errors.IllegalOperationError;
    	import flash.utils.getQualifiedClassName;
    	
    	public class DT2
    	{
    		private static var _instance:DT2 = null;
    		public function DT2()
    		{
    			trace("运行DT2 ");
    			if(_instance)
    			 throw new IllegalOperationError(getQualifiedClassName(this)+" 只运行实例化一次!");
    		}
    		public static function getInstance():DT2
    		{
    			return _instance ||= new DT2();
    		}
    
    	}
    
    }
    

     方法三:(隐式允许new一次 利用包外类看上去好像一次new都不行)

    package 
    {
    	import flash.errors.IllegalOperationError;
    	import flash.utils.getQualifiedClassName;
    	
    	public class DT3
    	{
    		private static var _instance:DT3 = null;
    		
    		public function DT3(instance:SureSingle=null)
    		{
    			if(instance==null)
    			 throw new IllegalOperationError(getQualifiedClassName(this)+" 是单例!");
    		}
    		public static function getInstance():DT3
    		{
    			return _instance ||= new DT3(new SureSingle());
    		}
    
    	}
    	
    }
    internal class SureSingle{}
    

      

  • 相关阅读:
    asp.net区
    推荐大家一个保护视力的Visual Studio皮肤
    微软Team Foundation Server相关技术
    TFS2008安装图解(详细版本)
    VS2008 ,TFS2008破解序列号
    分析器错误信息: 发现不明确的匹配。
    ASP.NET MVC Routing概述
    软件工程文档编写
    Visual SourceSafe学习小结
    aspnetpager 详解 (转)
  • 原文地址:https://www.cnblogs.com/dt1991/p/7890545.html
Copyright © 2020-2023  润新知