gpt4 book ai didi

flash - 使用 "Dependency Injection"是什么意思?有没有要展示的 AS3 代码示例?

转载 作者:行者123 更新时间:2023-12-01 07:58:20 24 4
gpt4 key购买 nike

我经常在阅读的 AS3 书中看到术语“依赖注入(inject)”。但是,它没有解释它到底是什么。任何人都可以使用一些 AS3.0 代码行展示它到底是什么吗?

谢谢维什瓦斯

最佳答案

依赖注入(inject)只是意味着不是由类决定它需要哪些对象才能工作,而是从外部传递这些对象。

在正常开发中,我们的对象具体决定它们的类,像这样:

public class MyClass
{
private var m_someObj:SomeObj = null;

public function MyClass()
{
this.m_someObj = new SomeObj;
}
}

转向依赖注入(inject),MyClass 现在从外部获取其依赖项:

public class MyClass
{
private var m_someObj:SomeObj = null;

public function MyClass( obj:SomeObj ):void
{
this.m_someObj = obj;
}
}

var myClass:MyClass = new MyClass( new SomeObj );

在那个例子中,我们在构造MyClass时传入了SomeObj类。您也可以使用公共(public)变量/属性。通过构造函数传递对象有利于重要的依赖关系。

现在为了让它真正有用,我们可以使用接口(interface)而不是具体类。这让我们可以轻松地更改 MyClass 的行为:

public interface ISomeObj
{
}

public class SomeObjImplA implements ISomeObj
{
}

public class SomeObjImplB implements ISomeObj
{
}

public class MyClass
{
private var m_someObj:ISomeObj = null;

public function MyClass( obj:ISomeObj ):void
{
this.m_someObj = obj;
}
}

var myClass1:MyClass = new MyClass( new SomeObjImplA );
var myClass2:MyClass = new MyClass( new SomeObjImplB );

举个例子,ISomeObj 接口(interface)可能描述了一个渲染器。 SomeObjImplA 类将使用普通的 addChild() 技术进行渲染,而 SomeObjImplB 类将使用 blitting 进行渲染。现在,您只需更改参数即可更改呈现 MyClass 对象的方式 - MyClass 类不需要知道它是正常呈现还是通过 blitting 呈现。

决定将哪个类传递给 MyClass 的对象就是所谓的注入(inject)器。它如何决定注入(inject)哪个类是您获得灵 active 的地方。例如,您可以加载包含要注入(inject)的类的 XML 对象,或使用反射,这就是 Robotlegs 的方式。我认为可行。

32bitkid 发布的链接很好地解释了原理,但这就是它的要点。您还可以查看 wiki page .如需奖励积分,请阅读 Inversion of Control ,这有点相关。

关于flash - 使用 "Dependency Injection"是什么意思?有没有要展示的 AS3 代码示例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8688125/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com