AS3接口使用记录
曾今在学习AS3代码的时候,书本上有提过关于接口这样的技术。但实际中接触的不多,原因大概是 底层框架已经是被写好,而自己的话接触的确实较少。而自己的小项目 更是犯不着用这个。一直搁着,也没怎么去弄。一度觉得可有可无的一种技术。直到今天用了之后,才觉得是个不错的东东,便做一记录。好了,闲话少说,正题开始。
接口是什么?
通俗的比喻就是,把一堆相关性不是很强的东西,通过接口来达到一定的归纳。
现实例子就是,U盘与支持U盘的电子设备,以及USB数据线之类的。因为大家都实现一种规定的接口,所以能够在一台电脑上支持所有实现了此接口的U盘。同理 一个U盘也可以在各种不同的实现了此接口的设备上工作。
接口定义关键字 interface
接口实现关键字 implements
下面就以U盘和电脑的关系来练习下
IUSB_3_0接口类
package com._523326.myInterface { public interface IUSB_3_0 { /** *USB3.0打印方法 * */ function print( ):void } }
IUSB_2_0接口类
package com._523326.myInterface { public interface IUSB_2_0 { /** *USB2.0的打印 * */ function printf( ):void } }
ISellPlat接口类
ISellPlat接口类 用于售价 具有售卖性质的 可以实现此接口 package com._523326.myInterface { public interface ISellPlat { /** *喊出广告语 * */ function sayADWords( ):void; } }
AplleDisk类实现了IUSB3 IUSB2接口 由于其具有售卖的性质 所以同时实现了ISellPlat接口
package com._523326.sample.udisk { import com._523326.myInterface.ISellPlat; import com._523326.myInterface.IUSB_2_0; import com._523326.myInterface.IUSB_3_0; public class AppleDisk implements IUSB_3_0,IUSB_2_0,ISellPlat { public function AppleDisk() { } public function print( ):void { trace("我是AppleDisk 实现了 IUSB2.0 IUSB3.0接口 此方法实现了是IUSB3.0"); } public function printf( ):void { trace("我是AppleDisk 实现了 IUSB2.0 IUSB3.0接口 此方法实现了是IUSB2.0"); } public function sayADWords( ):void { trace("AppleDisk 售价 ¥200"); } } }
TomatoDisk类只实现了IUSB2接口,所以这个U盘是不能插入某台电脑的USB3插口的 因为具有售卖的性质 所以同时实现了ISellPlat接口
package com._523326.sample.udisk { import com._523326.myInterface.ISellPlat; import com._523326.myInterface.IUSB_2_0; public class TomatoDisk implements IUSB_2_0,ISellPlat { public function TomatoDisk() { } public function printf( ):void { trace("我是TomatoDisk 实现了IUSB2.0接口"); } public function sayADWords( ):void { trace("TomatoDisk 售价 ¥100"); } } }
RiceDisk类 此U盘实现了USB3接口,可以插进电脑的USB3插口,同时具有售卖性质 所以实现了ISellPlat接口
package com._523326.sample.udisk { import com._523326.myInterface.ISellPlat; import com._523326.myInterface.IUSB_3_0; public class RiceDisk implements IUSB_3_0,ISellPlat { public function RiceDisk() { } public function print( ):void { trace("我是RiceDisk 实现了USB3.0接口"); } public function sayADWords( ):void { trace("RiceDisk 售价 ¥130"); } } }
下面是电脑类,没有使用电脑基类。为了方便起见 省去了 基类的继承
DogPc类 这是一台电脑 具有售卖的性质 所以同样实现了ISellPlat接口,同时这台电脑上面支持含有USB3的插口,可以对USB3的U盘进行操作
package com._523326.sample.pc { import com._523326.myInterface.ISellPlat; import com._523326.myInterface.IUSB_3_0; public class DogPC implements ISellPlat { public function DogPC() { } public function readFromDisk(type:IUSB_3_0):void { trace("DogPc从USB3.0接口 读取U盘"); type.print( ); } public function writeInDisk(type:IUSB_3_0):void { trace("DogPc从USB3.0接口 写入U盘"); type.print( ); } public function sayADWords( ):void { trace( "DogPc 售价 ¥2000" ); } } }
CatPc类 这台电脑具有售卖的性质 所以同样实现了ISellPlat接口,此电脑只包含一个USB2插口。只能插入USB2的U盘
package com._523326.sample.pc { import com._523326.myInterface.ISellPlat; import com._523326.myInterface.IUSB_2_0; public class CatPc implements ISellPlat { public function CatPc() { } public function readFromDisk(type:IUSB_2_0):void { trace("CatPc从USB2.0接口 读取U盘"); type.printf( ); } public function writeInDisk(type:IUSB_2_0):void { trace("CatPc从USB2.0接口 写入U盘"); type.printf( ); } public function sayADWords( ):void { trace( "CatPc 售价 ¥3000" ); } } }
主类 假设这是一个电子产品售卖处 有电脑和U盘售卖 所以 包含一个价格提示平台sellItem
package { import com._523326.myInterface.ISellPlat; import com._523326.sample.pc.CatPc; import com._523326.sample.pc.DogPC; import com._523326.sample.udisk.AppleDisk; import com._523326.sample.udisk.RiceDisk; import com._523326.sample.udisk.TomatoDisk; import flash.display.Sprite; public class Interface extends Sprite { public function Interface() { var catPc:CatPc = new CatPc( ); var dogPc:DogPC = new DogPC( ); var appleDisk:AppleDisk = new AppleDisk( ); var riceDisk:RiceDisk = new RiceDisk( ); var tomatoDisk:TomatoDisk = new TomatoDisk( ); catPc.readFromDisk( appleDisk );//由于AppleDisk同时实现了USB2 和USB3接口 所以其既可以插在CatPc上 又可以插在DogPc上 trace("----------------------------------------------------------"); dogPc.readFromDisk( appleDisk ); trace("----------------------------------------------------------"); catPc.readFromDisk( tomatoDisk );//因为TomatoDisk 只实现了USB2接口,所以只能在CatPc上使用,因为CatPc只有一个USB2插口,与DogPc不会兼容 trace("----------------------------------------------------------"); dogPc.readFromDisk( riceDisk );//因为RiceDisck 只实现了USB3接口,所以只能在DogPc上使用,因为DogPc只有一个USB3接口,与CatPc不会兼容 trace("----------------------------------------------------------"); //这些东西都是可以进行出售的 且都实现了ISellPlat接口,所以 都可以放在柜台上进行售卖 sellItem( catPc ); trace("----------------------------------------------------------"); sellItem( dogPc ); trace("----------------------------------------------------------"); sellItem( appleDisk ); trace("----------------------------------------------------------"); sellItem( riceDisk ); trace("----------------------------------------------------------"); sellItem( tomatoDisk ); } //卖物品 private function sellItem( type:ISellPlat ):void { type.sayADWords( ); } } }
运行结果:
CatPc从USB2.0接口 读取U盘
我是AppleDisk 实现了 IUSB2.0 IUSB3.0接口 此方法实现了是IUSB2.0
———————————————————-
DogPc从USB3.0接口 读取U盘
我是AppleDisk 实现了 IUSB2.0 IUSB3.0接口 此方法实现了是IUSB3.0
———————————————————-
CatPc从USB2.0接口 读取U盘
我是TomatoDisk 实现了IUSB2.0接口
———————————————————-
DogPc从USB3.0接口 读取U盘
我是RiceDisk 实现了USB3.0接口
———————————————————-
CatPc 售价 ¥3000
———————————————————-
DogPc 售价 ¥2000
———————————————————-
AppleDisk 售价 ¥200
———————————————————-
RiceDisk 售价 ¥130
———————————————————-
TomatoDisk 售价 ¥100
实现的接口的物品也并非不具有相同性,其肯定是包含有一定的相关性的。正如上面的 电脑和U盘 都是商品可以售卖,如果这样的话,那么和继承有何区别? 其实的话,所有的东西 都有相同点,正如AS3中的所有类的最顶层的基类都是Object。但接口的话,能够避免比较臃肿的继承,而且接口能够实现多个,而继承却只能有一个。