调度程序和actor的Java Roguelike类和子类结构

时间:2013-05-11 20:14:45

标签: java oop roguelike

作为JAVA继承的学习进程,我将调度器类和actor类放在一起。调度程序类创建一个actor对象列表并通过它们进行调用,调用actor来执行act()。

现在我对actor类的第一直觉是向玩家actor传递对Scheduler的引用,以便玩家可以在他/她的回合到达时暂停调度程序。

所以在调度程序中,我有一个对当前actor的引用,可以执行以下操作。

actor.act( this );

这是调度程序。

现在在玩家类中我可以声明行为如下......

    @Override
    public int act( Scheduler queue )
    {
        //need to pause scheduler here and wait for player to act
        queue.lock();
        //wait for action from player
                     if (this.playerActionComplete)
                     {
                           queue.unlock();
                     }
    }

这是正确的OOP方法吗?我已经发生了奇怪的事情,并想知道我是否应该坚持这种方法。

干杯!

1 个答案:

答案 0 :(得分:2)

由于三个主要原因,你不应该坚持这种方法:

1)循环依赖。将this作为参数传递是典型的代码气味。

2)单一责任。演员应该行动,玩家应该玩,调度员应该安排。不要让演员控制调度程序。如果其中一个演员忘记将Scheduler.unlock置于try finally块中怎么办?如果您想引入另一种具有完全不同的处理方式的调度程序,该怎么办?

3)不要重复自己/紧耦合。我假设调度程序可以使用不同类型的角色?如果是这样,他们是否都会包含相同的代码来锁定和解锁调度程序?或者它们都需要从同一个抽象基类继承吗?如果是这样,你就不会重复自己,而是将你的演员紧密地耦合到你的调度程序,这使得演员无法在没有调度程序的情况下工作。

为什么不让调度程序调用锁定并解除对act的调用?