0

我需要有关接口的建议。我有一个名为 Unit 的类,它可以攻击其他单位。攻击可以是空中或地面。我需要单一的方法来实现攻击调用attack()。一些单位只能攻击地面单位,一些空中单位或两者兼而有之。

这是我到目前为止提出的:

public interface Attack() {
    public void attack(SCObject object);
}

public interface GroundAttack() extends Attack {
    public void groundAttack(SCObject object);
}

public interface AirAttack() extends Attack {
    public void airAttack(SCObject object);
}

我可以有不同的单位:

Unit extends SCObject implements GroundAttack {
}

Unit extends SCObject implements AirAttack {
}

Unit extends SCObject implements AirAttack, GroundAttack {
}

问题是这个实现将显示两个地面和空中选项,而我只希望attack()方法可见。你能提出解决方案吗?或者这对你来说还可以吗?

4

2 回答 2

4

我会用

public interface Attack {
    public boolean canAttack(SCObject object);
    public void attack(SCObject object);
}

鉴于您不想暴露这种行为,我认为没有理由采用特定的地面或空中攻击方法。

于 2012-08-13T10:06:21.233 回答
3

我认为访问者双重调度模式可能适用于此,因为攻击能力取决于攻击者和受害者之间的交互。

攻击者通过某种形式的调用attacks(),并将自身作为参数传递,将允许受害者确定攻击的有效性。请注意,这可以让您在运行时更改可攻击性(例如,“地面”单位可以升空吗?)

于 2012-08-13T10:09:03.567 回答