dis_oo

flash\flex\AS\Unity3d\JS\HTML5\CSS3\AJAX
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

AS的设计模式(单例模式)

Posted on 2011-08-22 14:31  FLASH春哥  阅读(1143)  评论(0)    收藏  举报

一直对AS的设计模式一头雾水,今天请教了一下经理,他给我讲了一下,明白了许多,下面就给一个例子

package
{
	public class TextDian
	{
		private var a:int;
		private var b:int;
		private var c:int;
		public var showstr:String;
		public static var metest:TextDian=new TextDian();//这就是单例模式的用法
		public function TextDian()
		{
			
		}
		public function aF():void
		{
			
			showstr="the current function is aF";
		}
		public function bF(_bs:String):void
		{
			showstr="the current function is bF"+_bs;
		}
		
	}
}
对上面红色的区域,就是这样用法的精妙之处,在之前我如果要用这个类中的方法,或者属性,可能我会选择两种方式,第一种方法:先实例一个这样类,然后把属性定义为PUBLIC,如果我要在多个类中用到这里的方法,
是不是我要在那几个类中分别实例化一个呢,这样是不是太麻烦了,也不利于我去管理,第二种方法,就是把里面想用的的方法和属性定义为静态方法,或者静态属性,这样是能达到目的,但是的封装性太差了,也不好,
但现在我们用了,但是如果像上面这样写的话,我们就可以用TextDian.metest.方法名/属性名,就可以访问我想要的东西,又有封装性,多好
<?xml version="1.0" encoding="utf-8"?>
<s:WindowedApplication xmlns:fx="http://ns.adobe.com/mxml/2009"
					   xmlns:s="library://ns.adobe.com/flex/spark"
					   xmlns:mx="library://ns.adobe.com/flex/mx"
					   width="397" height="320" name="test">
 <fx:Script>
	 <![CDATA[
		 private function execute_aF():void
		 {
			 TextDian.metest.aF();
			 showtxt.text=TextDian.metest.showstr
			 
		 }
		 private  function execute_bF():void
		 {
			 TextDian.metest.bF("ni");
			 showtxt.text=TextDian.metest.showstr;
			
		 }
		
	 ]]>
 </fx:Script>
	<s:Panel x="10" y="-1" width="369" height="294" title="单例模式运用例子">
		<s:TextArea id="showtxt" x="35" y="28" width="298" height="120"/>
		<s:Button id="btnA" x="35" y="204" label="执行aF" click="execute_aF()"/>
		<s:Button id="btnB" x="261" y="204" label="执行bF" click="execute_bF()"/>
		
	</s:Panel>


</s:WindowedApplication>
效果图: