AS3 单例模式的加工,效果: 加强判断

单例模式小结1:这里只保证单利模式不能被多次实例化,而且AS3不能像java那样创建一个private的构造函数,
但是也可以用包外类的形式,传递一个参数,并且控制该参数只能在此Singleton1才可传递;
1.Outter为该AS文件的包外类,只有该文件内部可以访问。
2.Outter class中也只有一个实例,
3.同时在Singleton的构造函数中的判断也起到的加强的判断效果。
这些都是防止其他人传递该As文件外的其他类型,造成多次的实例化。
package  {
	
	import flash.display.MovieClip;
	import fl.motion.easing.Sine;
	
	
	public class Singleton1 extends MovieClip
	{
		public function Singleton1()
		{
			//1.检验是否可以不例化Singleton(答案是不可以。)************************
			//同时检验是否可以再另外实例一个Outter类(结果是不可以)

			//var singleton1:Singleton = new Singleton(new Outter());
			
			//var singleton1:Singleton = new Singleton(null);
			
			/*
			输出:
			Outter
			Outter
			Error: 单例模式不能实例化!
			at Singleton()
			at Singleton1()
			*/
			
			//1********************************************************************
			
			
			//2.验证单利模式是否可以得到唯一一个实例。///
//          var singleton:Singleton = Singleton.getInstance();

//			var sin:Singleton = Singleton.getInstance();

//	        trace(sin == singleton);

			/*
			输出:
			Outter
		    true
			Singleton Pattern
			*/
			/2  //

			
			trace("Singleton Pattern");

		}
	}
	
}


/**
*Singleton 和OutpackageClass  一定要在一起。但Singleton作为一个单独的类文件的时候
*OutPackageClass一定要作为Singleton的包外类
*/
class Singleton 
{
	
	private var outter:Outter = Outter.instance;
	
	private static var singleton:Singleton;
	
	public function Singleton(outter:Outter){
		
		if(outter == null || outter != this.outter )
		{
			throw new Error('单例模式不能实例化!');
		}
	}
	public static function getInstance():Singleton
	{
		
		//outter = Outter.instance;
		if(singleton == null)
		{
			singleton = new Singleton(Outter.instance);
		}
		
		return singleton;	
	}	
}

class Outter
{
	public static var instance:Outter = new Outter();
	
	public function Outter()
	{
		trace("Outter");
	}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值