微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何避免通过接口重用相同的实现代码?

如何解决如何避免通过接口重用相同的实现代码?

| 首先,我对“还有另一个界面问题”表示歉意。我认为这可能值得一问,因为这是一个奇怪的问题。我正在使用的项目使用Actionscript 3,但这更多是一个通用的OOP问题。 情况如下: 我有一个已经从基类继承的类;它是电子游戏中的对象。 (假设它是一艘太空飞船。)在我的游戏中,我希望一次在屏幕上显示许多太空飞船,因此我决定使用链接列表创建一个对象池。结构体。 从逻辑上讲,因为Spaceship类已经从基类继承,所以我将使用接口来定义与链表有关的方法。此外,这样做还可以将这些方法扩展到其他类,例如Asteroid类,Bullet类或Particle类。 这就是问题所在-接口的优势在于,它使您可以根据需要重新定义所使用的每个类的实现。但是,对于像链表这样的东西,代码不会在类之间更改。由于我计划使用很多类来实现这些对象池方法,因此我很想避免在每个新类中重复使用相同的实现代码。 问题:有没有一种方法可以避免对我使用的每个类重复使用相同的完全相同的链表代码?还是这仅仅是必然性?看来这违反了“一次又一次”原则。是否可以在继承块中定义一个完整的功能,而不仅仅是其原型? 如果这是一个愚蠢的问题,请告诉我。 (如果我问是不是,可能是,但是,嘿,有时候不傻就无法学习。)似乎应该有一种更合乎逻辑的方法来做这样的事情。     

解决方法

在其他支持多种继承的语言中,有一种简单的方法可以实现,而无需所有游戏对象都拥有一个共同的祖先:您的飞船可以继承自基本飞船类以及链表元素类。不幸的是,AS3不支持多重继承,因此您必须选择以下两者之一: A.完全按照您的建议使用界面 要么 B.让您的所有游戏对象基类都继承自实现链表功能并扩展Sprite(或MovieClip)的共同祖先,而不是您的游戏对象基类直接扩展Sprite或MovieClip。 我可能会选择后者,以解决您的确切问题。我可能会从Sprite或MovieClip派生出来,然后将其称为GamePoolObject或类似的东西...     ,我从不喜欢使用接口。 我要做的是再做一个基础课 第一个类将是基类,我们将其称为SpaceObject。所有空间对象都具有质量,速度,摩擦(如果有),旋转的属性。 SpaceObject还将扩展UIcomponent,因为我们希望最终将其添加到显示列表中,并且具有用于命中检测的继承方法会很好。 它还将具有处理运动以及空间对象所需的其他方法。 然后,无论何时我想创建一个新的空间对象,我都将扩展SpaceObject类。 公共类SpaceShip扩展了SpaceObject或 公共类Commet扩展了SpaceObject。 这些类将继承SpaceObjects属性,并具有自己的属性,例如尾巴有多长或它拥有什么武器。应该封装它们以处理与它们相关的任何东西     

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。