actionscript-3 – 如何避免将相同的实现代码重用于接口?

首先,我为“又一个界面问题”道歉.我认为这个可能值得一提,因为这是一个奇怪的问题.我正在使用的项目使用了Actionscript 3,但这更像是一般的OOP问题.

情况如下:

我有一个已经从基类继承的类;它是电子游戏中的一个对象. (让我们说这是一艘宇宙飞船.)在我的游戏中,我想在屏幕上同时拥有许多太空飞船,所以我决定使用链表结构创建一个对象池.

逻辑上,因为类Spaceship已经从基类继承,所以我将使用一个接口来定义与链表有关的方法.另外,这样做可以让我将这些方法扩展到其他类 – 例如类Asteroid,类Bullet或类Particle.

这就是问题所在 – 界面的优势在于它允许您根据需要重新定义所使用的每个类的实现.但是,对于像链接列表这样的东西,代码不会在类之间发生变化.由于我计划有很多将实现这些对象池方法的类,我真的希望避免在每个新类中反复使用相同的实现代码.

问题:有没有办法避免为我使用的每个类重复使用相同的链接列表代码?或者这只是必然性?这似乎违反了Once and Only Once原则.是否可以在继承块中定义一个完整的函数,而不仅仅是它的原型?

如果这是一个愚蠢的问题,请告诉我. (如果我问它是否是,它可能是,但是嘿,偶尔也不能学会愚蠢.)似乎应该有更合理的方法来做这样的事情.

最佳答案 在支持多重继承的其他语言中,有一种简单的方法可以在没有所有游戏对象需要共同祖先的情况下执行此操作:您的太空船可以从基础船类继承,也可以从链接列表元素类继承.不幸的是,AS3不支持多重继承,因此您必须选择:

A.完全按照您的建议使用界面

要么

B.让所有游戏对象基类继承自实现链表功能的公共祖先,并扩展Sprite(或MovieClip),而不是直接扩展Sprite或MovieClip的游戏对象基类.

我可能会选择后者来解决你的确切问题.我可能从Sprite或MovieClip派生出来并调用GamePoolObject之类的东西……

点赞