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{}
    

      

  • 相关阅读:
    Django Form组件实例:登录界面[Form表单提交,Ajax提交]
    开张啦!
    CART剪枝
    TensorFlow全新的数据读取方式:Dataset API入门教程
    关于神经网络中的padding
    cs231n(一)
    协方差与pearson相关系数
    Auto Encoder
    markdown公式编辑参考
    Python使用日常
  • 原文地址:https://www.cnblogs.com/dt1991/p/7890545.html
Copyright © 2011-2022 走看看