代码之家  ›  专栏  ›  技术社区  ›  Ikke

flash as3中的类设计和继承问题

  •  0
  • Ikke  · 技术社区  · 16 年前

    我对如何设计一些类有问题。我有三节课。一个超类和两个子类。

    flash制作了一个子类(animatedcharacter),用于在屏幕上显示对象。另一个(字符物理)是我自己制作的,用来扩展超类。

    问题是我使用的对象是animatedcharacter类型,所以我不能把它放在characterphysics类型的变量中。

    我尝试的是某种装饰模式,给characterphysics类型的对象一个对另一个对象的引用。但现在我必须重写超类的所有方法,并将methodcalls传递给引用。不是一个理想的情况。

    有人知道如何解决这种问题吗?

    alt text http://www.freeimagehosting.net/uploads/7a95f8352c.png

    3 回复  |  直到 16 年前
        1
  •  1
  •   hasseg    16 年前

    我不太明白你所描述的这个类结构的目的(类名让我困惑),但总的来说,我想到了一些可能对你有帮助的事情:

    几乎总是最好的解决方案是尝试重新思考您的类模型,例如通过评估您是否应该拆分 责任 以另一种方式使用类,以便可以更好地利用继承和多态性。

    “问题是我用的东西, 是动画人物类型,所以我 不能仅仅把它放在一个变量中 键入CharacterPhysics。“

    如果你想 AnimatedCharacter 变成一个类型的变量 CharacterPhysics ,前者应该扩展后者,或者您应该为两者都有一个公共接口(或超类),然后按原样键入变量。如果这是不可能的,我的意见是,你可能应该重新考虑和重构你的整个类结构,假设你有一个坚实的“面向对象”的理由首先想这样做;)。

    如果以上是不可能的,你可以在你的上下文中评估一些其他技巧:

    • 使用 mixins 可以作为一个“穷人的多重继承”。Derek Wischusen有一些关于如何在AS3中实现它们的例子 flexonrails.net .
    • 实现decorator模式的“种类” flash.utils.Proxy . 这种方法的问题是,您将许多错误检查从编译时推迟到运行时,但好的一面是,您不必手动编写“修饰”对象的所有方法的“代理”实现,而只需编写一个( callProperty() 相反。
        2
  •  0
  •   dkretz    16 年前

    你可以把一个子集解释为一个超类的实例,而不是副SerSA。你是不是把这句话说反了?

    如果是,您可以使用:

    vas-cp:特征物理学;

    var ac:animatedcharacter=cp作为animatedcharacter

        3
  •  0
  •   Iain    16 年前

    在我看来,这两个应该是主类实现的接口