AS3接口使用记录
曾今在学习AS3代码的时候,书本上有提过关于接口这样的技术。但实际中接触的不多,原因大概是 底层框架已经是被写好,而自己的话接触的确实较少。而自己的小项目 更是犯不着用这个。一直搁着,也没怎么去弄。一度觉得可有可无的一种技术。直到今天用了之后,才觉得是个不错的东东,便做一记录。好了,闲话少说,正题开始。
接口是什么?
通俗的比喻就是,把一堆相关性不是很强的东西,通过接口来达到一定的归纳。
现实例子就是,U盘与支持U盘的电子设备,以及USB数据线之类的。因为大家都实现一种规定的接口,所以能够在一台电脑上支持所有实现了此接口的U盘。同理 一个U盘也可以在各种不同的实现了此接口的设备上工作。
接口定义关键字 interface
接口实现关键字 implements
下面就以U盘和电脑的关系来练习下
IUSB_3_0接口类
1 2 3 4 5 6 7 8 9 10 11 | package com._523326.myInterface { public interface IUSB_3_0 { /** *USB3.0打印方法 * */ function print( ): void } } |
IUSB_2_0接口类
1 2 3 4 5 6 7 8 9 10 11 | package com._523326.myInterface { public interface IUSB_2_0 { /** *USB2.0的打印 * */ function printf( ): void } } |
ISellPlat接口类
1 2 3 4 5 6 7 8 9 10 11 12 | ISellPlat接口类 用于售价 具有售卖性质的 可以实现此接口 package com._523326.myInterface { public interface ISellPlat { /** *喊出广告语 * */ function sayADWords( ): void ; } } |
AplleDisk类实现了IUSB3 IUSB2接口 由于其具有售卖的性质 所以同时实现了ISellPlat接口
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | 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接口
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | 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接口
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | 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盘进行操作
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | 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盘
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | 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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 | 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。但接口的话,能够避免比较臃肿的继承,而且接口能够实现多个,而继承却只能有一个。