5

有没有办法使主类 - 基于主 .fla 的类 - 静态?所以我们可以像在java中一样使用它,能够从其他类中引用它,因为我必须将main本身的实例作为参数传递给一个类,否则我会失去引用。我试图添加静态前缀,但似乎 as3 不允许。

4

2 回答 2

8

AS3 中没有静态类的概念。

您可以使用单例模式来公开主类的唯一实例:

public class Main extends Sprite {

    public static var instance:Main;

    public function Main() {
         instance = this;
    }

...或者只是将其他属性/方法标记为static,尽管它变得更难管理。

我需要提一下,虽然使用static有时会导致糟糕的代码设计(例如,您可以通过Main构造函数将实例传递给需要它的类)

于 2012-11-21T15:43:32.690 回答
3

这不会是流行的答案,我知道......使用静态属性来公开实例是一个非常糟糕的主意。Singleton 反模式非常流行,但不应该流行,它会导致不良实践并不必要地将类相互联系起来。

你需要问问自己是否真的需要在其他类中引用主类?AS3 有一个事件系统,可以为您提供所需的所有松散耦合。如果显示对象需要与主类实例通信,这可以通过通过显示列表发送事件来完成。

依赖管理的问题最好由依赖注入框架来处理(其中许多框架都有一些集中的消息传递系统,这远远超过了显示列表上的事件)。如果您觉得任何流行的(PureMVC、RobotLegs 等)太过分了,您可以自己轻松创建(简单且有限的)一个。

有很多工具和模式永远不必依赖单例或静态实例访问器,因为它们让你的生活变得悲惨,你的代码脆弱、不灵活、不可测试、不可靠和有缺陷。

于 2012-11-21T17:21:14.407 回答