![]() |
1
2
对于第一个问题,听起来你需要
对于第二个问题,人工智能是否需要注入
一 问题 对于你……为什么武器和人工智能会得到坦克的参考? |
![]() |
2
2
听起来您没有使用足够的接口。它有助于思考行为(实现)和功能(公开的接口)之间的区别。 您希望每个投射物、人工智能和武器以相同的方式工作(拥有相同的接口),但实现独特的行为,并具有一些共享的行为。一个典型的模型是拥有Iweapon、iProjective和iIntelligence接口,这些接口定义了这些对象的公开的公共面。然后,您将拥有实现接口的每个(例如,base抛射体)的基类,并为所有要使用的抛射体提供一些常见的行为。 现在,在类的构造函数(或setter,或在任何地方)中,您将接受类型的接口。 所以艾杜坦克老板的课可能看起来像
现在,每个依赖于人工智能方法的坦克方法(可能是从人工智能和坦克发射的事件会寻找这些事件来做些什么?)可以实现使用该接口,任何特定于武器的代码都将调用Iweapon接口。 什么 实际上发生了 基于特定的武器子类如何实现方法以及如何使用基本武器中的公共代码。这是多态性的基础,也是为什么注入可以工作的原因。 |
![]() |
3
1
在构建时将类传递给基础确实是错误的做法。 基类不应该知道它的派生类。 如果你“必须以某种方式注入武器需要构造的抛射体类本身”,这意味着你没有正确地设计你的类层次结构和方法。 除非你在这里发布你需要通过的例子,否则我很难提供一个具体的解决方案。 |
![]() |
SkarabePL · Yii2依赖注入、配置和继承 6 年前 |