zoukankan      html  css  js  c++  java
  • 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{}
    

      

  • 相关阅读:
    日志处理
    md5加密
    os 模块
    time模块
    函数的进阶
    参数 返回值
    文件操作
    集合 拷贝
    linux如何更快的远程拷贝?scp,tar,rsync?
    修改内核临时端口范围
  • 原文地址:https://www.cnblogs.com/dt1991/p/7890545.html
Copyright © 2011-2022 走看看