0

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

现在我对actor类的第一个直觉是向玩家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 方法吗?我已经发生了奇怪的事情,想知道我是否应该坚持这种方法。

干杯!

4

1 回答 1

2

您不应该坚持使用这种方法,主要原因有以下三个:

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

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

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

为什么不让调度程序在调用 act 时调用 lock 和 unlock 呢?

于 2013-05-12T11:37:11.063 回答