gpt4 book ai didi

用于调度程序和参与者的 Java Roguelike 类和子类结构

转载 作者:行者123 更新时间:2023-12-02 07:02:16 26 4
gpt4 key购买 nike

作为 JAVA 继承的学习进程,我组合了一个调度程序类和参与者类。调度程序类创建一个参与者对象列表,并通过它们调用参与者的 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 方法吗?我已经发生了一些奇怪的事情,并且想知道我是否应该坚持这种方法。

干杯!

最佳答案

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

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

2) 单一职责。 Actor 要表演, Actor 要表演,调度员要调度。不要让 Actor 控制调度程序。如果其中一个参与者忘记将 Scheduler.unlock 放入 try finally block 中怎么办?如果您想引入另一种具有完全不同工作方式的调度程序怎么办?

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

为什么不让调度程序围绕 act 的调用调用 lock 和 unlock 呢?

关于用于调度程序和参与者的 Java Roguelike 类和子类结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16501325/

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