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

      

  • 相关阅读:
    GrapeCity Documents (服务端文档API组件) V3.0 正式发布
    js 手机号码正则表达式
    springMvc 注解@JsonFormat 日期格式化
    solr java代码
    solr全文检索
    在阿里云服务器CentOS7安装mysql提示“No package mysql-server available上安装mysql遇到的问题
    MockBean 单元测试
    redis缓存
    c3p0连接池
    springboot Transactional事务的使用
  • 原文地址:https://www.cnblogs.com/dt1991/p/7890545.html
Copyright © 2011-2022 走看看