As3 一些设计手法笔记(2)

来源:互联网 发布:怎么看淘宝抢购第几名 编辑:程序博客网 时间:2024/04/29 17:43

 

一、类结构体:

 

   我不知道改这个名字对不对,网上是不是存在这种说法,在这里暂时不追究它的来源,它只是我脑海里面浮现出来的一个想法,它和c++ 结构体有相似的地方,因此我借用了c++特点来改了这个名称。要知道这种特性,我们先拿c++的一个结构体来观察一下。

 

  有时候,我们会使用这种方式来对数据进行绑定。例如在一个游戏角色里面,它有基本的属性值,则可以设计为一种没有方法的类体,他与c++结构体作用有相似的地方。

 

 C++结构体:

 

 

访问结构体的时候,直接调用里面的属性就成了。

work.age=12;

 

actionScript类结构体表示:

 

有了这种方式之后,当我们创建一个类的时候,就能够像c++结构体一样引用他里面的属性值。

var worker:Employee=new Employee();

worker.name=”张三”;

worker.age=23;

worker.sex=””;

 

这样通过类引用里面的属性就像c++结构体一样,在某一些书称这种设计值对象,通过封装了这个类,让对象拥有属性。有趣的时候,在设计这种类结构的时候,并没有引入除构造函数之外的方法。因此这种类特色就在这里。这种设计的方式,和MVC模式当中M模型会有一些联系,有兴趣可以参考MVC模式。

 

 

 

二、类枚举:

有时候,我们希望定义一系列的已经知道的常量值,就如定义消息协议一样,这样我们可以通过枚举的方式,将其罗列出来,一般来讲这个类可以不必考虑继承,在某个时候可以声明该枚举的类为final类,这样就不能被继承了。当然你可以有自己喜欢的方式处理这种枚举的方式。这种方式是多种多样,而这里提供一种比较常用的设计手法。

flash.display. GradientType 里面的GradientType来讲,在这个类当中,只是定义了两个静态的常量。

 

public static const RADIAL:String = "radial"

public static const LINEAR:String = "linear"

 

 

使用的时候,通过类引用里面的属性。GradientType. LINEAR.

如果你细心的会发现,这个类就是涉及到图形渐变的方面。呵呵,信不信?可以去查看帮助文档。

 

 

三、构造函数的参数

 

 

在创建对象的时候,我们首先执行是构造函数,这个时候,你是否会想过书写构造函数的时候,构造函数要不要带参数呢?如果带的话,带几个好呢?

我们在学习数学的时候,假设f(x)=x+1; x=1的时候,则f1=1+1=2. 同理

f(a,b)=a+b+3的时候,f(1,2)=1+2+3=6.

同理…..n个参数f(x…….)=x……

 

参考这种模式,我们可以发现,构造函数可以带无限制个参数,因为它本身就是一个函数。

也许你会问题,带多少个参数好?具体问题具体分析,比如flash.geom包下的Point类,它带两个参数,这两个参数记录了坐标系。

             

在这里设计,根据坐标系的特点而设计,这种设计方式很合理。

 

同理另外一个几何类Rectangle类则记录了四个参数。

 

 

Rectangle(x:Number = 0, y:Number = 0, width:Number = 0, height:Number = 0)

 

 

而你发现,有时候构造函数里面的参数说不定是5个,6个,16甚至n个等。参数个数,本身没有规定的,并不是越少越好,也不是越多越好,关键是适合。

 

这里设计当中,你会不知不觉应用了。比如我们要创建一个鱼类;

  

var  myfish=new fish();//

这样我们就从中创建了一条鱼。要多少条鱼,采用循环的方式都可以实现到。

for(;;)

{

 //复制对象

}

 

改造让其构造函数带一个参数。

  

通过输入值的时候,我们可以估计到这条鱼有多重;

var  myfish=new fish(10);/

trace(myfish..weight());

有了这个鱼类后,伙计们当你们出外钓鱼的时候,会很方便计算出鱼的重量,而不需要精密电子秤量度。

呵呵,如果不合适,你投诉我,甚至可以E-mail 我,让我改一下,让你的鱼逃不过你的锐利的眼睛和精明计算。

谢谢