java - 类设计: change text on button click

标签 java coupling cohesion

我正在制作的游戏有 2 个类:图形用户界面类和逻辑类,用于数字和十字游戏。 GUI 类有一个使用 JButton 数组的方法,并使用相同的匿名内部类操作监听器返回它们。

当我单击按钮时,我希望文本更改为 x 或 o,具体取决于玩家 1 或 2,但是这段代码应该在逻辑类中,不应该吗,所以不知何故我应该在逻辑类并从 make 按钮方法的匿名内部类 Action 监听器调用它。但是,逻辑类不应该有对 gui 的引用,因为 gui 有对逻辑类的引用。

最佳答案

考虑以下类的草图:

public class Game{
    public void switchPlayer(){
        // among other things calls all GameListeners
    }
    public void setMarker(int x, int y);

    public Player getCurrentPlayer();
    public Player getPlayerOwningField(int x, int y);

    public void registerGameListener(GameListener l);
}

public interface GameListener(){
    void gameChanged(Game g)
}

public class GUI implements GameListener(){
    private Game game;
}

单击字段时,将调用 game.setMarker(x,y)。游戏知道当前的 Player 是谁,所以它可以适本地标记字段。它还会触发 GameChanged 事件。在应用程序设置期间,gui 必须注册/注册为游戏的 GameListener。所以它也会得到通知。它使用游戏的 getters 来更新 gui。完成。

当然还有很多改进的空间,例如在大型游戏中,仅仅因为一个字段发生了变化而更新完整的 UI 并不是一个好主意,但它应该让你开始

关于java - 类设计: change text on button click,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/649909/

相关文章:

java - 如何使用wireTap传递 header ?

java - longBitsToDouble,不进行舍入,是否可以

java - 内聚性和耦合性——如何确定阈值?

linux - 如何在 Linux 上提交 R 作业?

php - 通过紧密耦合其值对象摆脱实体工厂

java - 关于java编程中内聚性的探究

java - 为什么它会跳过我的 if-else 语句的 else 部分?

java - 为什么在一个循环中加入所有线程与一次启动和加入一个线程不同?

angular - 服务的松耦合与紧耦合